Airflow 为什么即使分支任务失败且触发规则为“一个成功”,也要完成气流下游任务?

Airflow 为什么即使分支任务失败且触发规则为“一个成功”,也要完成气流下游任务?,airflow,Airflow,我通过一次考试,注意到以下几点: 最后一个任务在后续分支任务完成之前排队。我发现这很奇怪,因为在对最后一个任务排队之前,它应该知道它的上游任务是否成功触发规则是一个成功 为了测试这一点,我将4个follow_branch_uu任务中的3个替换为将失败的任务,并注意到,无论follow_x branch任务状态如何,下游任务都会完成。如图所示: 有人能向我解释一下这种行为吗?因为通常失败的任务会阻止下游任务的执行,这让我感觉不直观 定义联接任务的代码: join = DummyOperator(

我通过一次考试,注意到以下几点:

最后一个任务在后续分支任务完成之前排队。我发现这很奇怪,因为在对最后一个任务排队之前,它应该知道它的上游任务是否成功触发规则是一个成功

为了测试这一点,我将4个follow_branch_uu任务中的3个替换为将失败的任务,并注意到,无论follow_x branch任务状态如何,下游任务都会完成。如图所示:

有人能向我解释一下这种行为吗?因为通常失败的任务会阻止下游任务的执行,这让我感觉不直观

定义联接任务的代码:

join = DummyOperator(
    task_id = "join",
    trigger_rule = TriggerRule.ONE_SUCCESS,
    dag=dag
)
定义自

one_success:只要至少有一个父级成功,它就会触发,而不是等待所有父级都完成 如果继续使用一个成功,则需要所有四个后续分支-x任务都失败,才能使join不运行。

尝试将触发器规则设置为分支运算符上的所有完成,如下所示:

branch_task = BranchPythonOperator(
    task_id='branching',
    python_callable=decide_which_path(),
    trigger_rule="all_done",
    dag=dag)
不知道这是否有效,但它似乎帮助了一些人:


我想我在什么地方读到过类似这样的错误,但现在找不到参考资料。为什么其他任务使用此浅色边框颜色branch_b-branch_d和后续?浅色背景颜色是由不同的运算符决定的。粉红色表示PythonOperator,它引发了一个异常,浅绿色表示DummyOperator。粉红色边框表示跳过的任务。您可以在图像的左上角看到此图例。我的意思不同:为什么边框颜色较浅?我不确定这是否正确-文档说明:one_success:在至少一个父级成功后立即激发,它不会等待所有的父项都完成,因为父项是任务的前一项。在这种情况下,branch_a是父级,follow_branch_a是父级。由于join任务需要一次成功,因此它只应在以下至少一个条件下运行。。。任务成功了,对吗?@SimonD我相信你在重新阅读气流文档和上面的问题后是正确的-我将修改我的答案。谢谢你的反馈!