Is there a way to configure different 'retries' for tasks in the same DAG

前端 未结 2 974
一向
一向 2021-01-07 11:14

I have a DAG with many sub-tasks in it. In the middle of the DAG, there is a validation task and based on the result/return code from the task, i want to take two different

相关标签:
2条回答
  • 2021-01-07 11:49

    You can have retries at the task level.

    run_this = BashOperator(
        task_id='run_after_loop',
        bash_command='echo 1',
        retries=3,
        dag=dag,
    )
    
    run_this_last = DummyOperator(
        task_id='run_this_last',
        retries=1,
        dag=dag,
    )
    

    Regarding your 2nd problem, there is a concept of Branching.

    The BranchPythonOperator is much like the PythonOperator except that it expects a python_callable that returns a task_id (or list of task_ids). The task_id returned is followed, and all of the other paths are skipped. The task_id returned by the Python function has to be referencing a task directly downstream from the BranchPythonOperator task.

    Example DAG:

    import random
    
    import airflow
    from airflow.models import DAG
    from airflow.operators.dummy_operator import DummyOperator
    from airflow.operators.python_operator import BranchPythonOperator
    
    args = {
        'owner': 'airflow',
        'start_date': airflow.utils.dates.days_ago(2),
    }
    
    dag = DAG(
        dag_id='example_branch_operator',
        default_args=args,
        schedule_interval="@daily",
    )
    
    run_this_first = DummyOperator(
        task_id='run_this_first',
        dag=dag,
    )
    
    options = ['branch_a', 'branch_b', 'branch_c', 'branch_d']
    
    branching = BranchPythonOperator(
        task_id='branching',
        python_callable=lambda: random.choice(options),
        dag=dag,
    )
    run_this_first >> branching
    
    join = DummyOperator(
        task_id='join',
        trigger_rule='one_success',
        dag=dag,
    )
    
    for option in options:
        t = DummyOperator(
            task_id=option,
            dag=dag,
        )
    
        dummy_follow = DummyOperator(
            task_id='follow_' + option,
            dag=dag,
        )
    
        branching >> t >> dummy_follow >> join
    
    0 讨论(0)
  • 2021-01-07 11:54

    Regarding your first problem, you set task/Operator specific retry options quite easily. Reference: baseoperator.py#L77.

    Problem two, you can branch within a DAG easily with BranchPythonOperator (Example Usage: example_branch_operator.py). You will want to nest your validation task/logic within the BranchPythonOperator (You can define and execute operators within operators).

    0 讨论(0)
提交回复
热议问题