我通过example script on BranchPythonOperator工作,我注意到以下内容:
在follow_branch_x任务完成之前,最终任务将被排队。我发现这很奇怪,因为在排队最终任务之前,它应该知道它的上游任务是否是成功的(TriggerRule是ONE_SUCCESS)。
为了测试这一点,我将4个follow_branch_任务中的3个替换为失败的任务,并注意到无论follow_x分支任务状态如何,下游任务都完成了。见图:
任何人都可以向我解释这种行为,因为它感觉不直观,因为通常失败的任务会阻止下游任务被执行。
定义连接任务的代码:
join = DummyOperator(
task_id = "join",
trigger_rule = TriggerRule.ONE_SUCCESS,
dag=dag
)
答案 0 :(得分:2)
尝试在您的分支运算符上设置char again = 'Y';
while (again == 'Y' || again == 'y') { ... }
到trigger_rule
,如下所示:
all_done
不知道这是否会起作用,但似乎以前帮助了一些人:
答案 1 :(得分:0)
Airflow API的定义
one_success
:一旦至少一个父母成功就会激活,它不会等待所有父母完成如果您继续使用one_success
,则无法运行follow_branch-x
,因此您需要执行四个join
任务中的所有任务。