首页 > 解决方案 > 成功运行任务但不跳过

问题描述

我在 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、one_success、none_failed、none_skipped 和 dummy。

谢谢!

标签: pythonairflow

解决方案


我认为您可以修改文档中给出的分支示例。在一个分支上,首先触发 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

推荐阅读