当前位置:  开发笔记 > 前端 > 正文

气流触发规则"all_done"和"all_success"之间有什么区别?

如何解决《气流触发规则"all_done"和"all_success"之间有什么区别?》经验,为你挑选了3个好方法。

我正在处理的工作流程中的一个要求是等待某个事件在给定时间内发生,如果没有发生则将任务标记为失败仍然应该执行下游任务.

我想知道"all_done"是否意味着所有依赖任务都已完成,无论它们是否成功.



1> Sheena..:

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

all_done表示所有操作都已完成.也许他们成功了,也许不是.

all_success表示所有操作都已完成且没有错误

所以你的猜测是正确的



2> Davos..:

小结
如果SUCCESS,FAILED,UPSTREAM_FAILED,SKIPPED任务的计数大于或等于所有上游任务的计数,则任务"全部完成".

不知道为什么会比这更大?子公司也许做了一些奇怪的事情.

如果上游任务的计数和上游任务的成功计数相同,则任务"全部成功".

详细信息
评估触发器规则的代码在https://github.com/apache/incubator-airflow/blob/master/airflow/ti_deps/deps/trigger_rule_dep.py#L72

    全部完成

以下代码运行qry并返回第一行(查询是一个只会返回一行的聚合)到以下变量中:

successes, skipped, failed, upstream_failed, done = qry.first()

查询中的"完成"列对应于此:func.count(TI.task_id)换句话说,匹配过滤器的所有任务的计数.过滤器指定它仅计算当前dag中的上游任务,从当前执行日期开始计算:

 TI.state.in_([
                    State.SUCCESS, State.FAILED,
                    State.UPSTREAM_FAILED, State.SKIPPED])

因此done是对这4个状态之一的上游任务的计数.

后来有这个代码

upstream = len(task.upstream_task_ids)
...
upstream_done = done >= upstream

实际的触发规则只会失败

if not upstream_done

    ALL_SUCCESS

代码相当简单,概念很直观

num_failures = upstream - successes
if num_failures > 0:
... it fails



3> javed..:

考虑将ShortCircuitOperator 用于您所述的目的.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有