我在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, 一次成功,一次失败,一次跳过和虚拟。
谢谢!
答案 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