成功运行任务,而不是跳过任务

时间:2019-08-07 13:00:09

标签: python airflow

我在AirFlow中有一些任务,仅在先前的任务成功执行且未跳过时才想触发。根据AirFlow文档,如果我跳过一项任务,而下一个任务设置为“ all_success”,则无论如何都会触发该任务。有什么办法可以避免这种情况?

my_task = PythonOperator(
    task_id='task_id',
    python_callable=my_func,
    provide_context=True,
    trigger_rule='all_success',
    dag=my_dag)

http://airflow.apache.org/concepts.html#trigger-rules

  

必须意识到触发规则和跳过规则之间的相互作用   计划级别的任务。跳过的任务将通过触发器级联   规则all_success和all_failed,但不是all_done,one_failed,   一次成功,一次失败,一次跳过和虚拟。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您可以修改文档中给出的分支示例。在一个分支上,首先在none_skipped上触发,然后在执行none_skipped和all_success之后执行所需的任务。默认情况下,另一个分支将是all_success,并且将在只有none_skipped的情况下分支到您只想完成的分支。

run_this_first = DummyOperator(task_id='run_this_first', dag=dag)
branching = BranchPythonOperator(
    task_id='branching', dag=dag,
    python_callable=lambda: 'none_skipped_branch'
)

none_skipped_branch = DummyOperator(task_id='none_skipped_branch',trigger_rule='none_skipped', dag=dag)
none_skipped_and_all_success = DummyOperator(task_id='none_skipped_and_all_success', dag=dag)

branch_false = DummyOperator(task_id='branch_false', dag=dag)

join = DummyOperator(task_id='join', dag=dag)

run_this_first >> branching
branching >> none_skipped_branch >> none_skipped_and_all_success >> join
branching >> branch_false >> join