Airflow 等待Apache中上一次运行的所有下游任务

Airflow 等待Apache中上一次运行的所有下游任务,airflow,Airflow,我正在运行多个实例。因此,max\u active\u runs=1不是我的解决方案。 等待下游任务只能等待直接下游任务 从baseoperator.pycode wait_for_down:当设置为true时,任务的一个实例 X将在上一个实例的下游等待任务 要在运行前成功完成任务X的。如果 任务X的不同实例会改变相同的资源,而此资源 由任务X的下游任务使用。请注意,这取决于过去的任务 无论在何处使用wait_for_down,都强制为True。还要注意 仅等待上一个任务实例下游的任务 对于任何

我正在运行多个实例。因此,
max\u active\u runs=1
不是我的解决方案。
等待下游任务
只能等待直接下游任务

baseoperator.py
code

wait_for_down:当设置为true时,任务的一个实例 X将在上一个实例的下游等待任务 要在运行前成功完成任务X的。如果 任务X的不同实例会改变相同的资源,而此资源 由任务X的下游任务使用。请注意,这取决于过去的任务 无论在何处使用wait_for_down,都强制为True。还要注意 仅等待上一个任务实例下游的任务 对于任何下游任务的状态都将被忽略

如何等待所有下游任务

在我的DAG中有多个并行步骤

编辑:


我尝试了Relic16建议的ExternalTaskSensor等待C1/C2/C3。。完成。它在回填过程中创建竞态条件。因为一次运行多个实例,尽管
依赖于\u pass
是真的。一旦第一次运行的ExternalTaskSensor成功并处理了实际的下一个任务(A1/A2/A3..),它就会在第二次dag运行中触发ExternalTaskSensor,并消耗所有插槽(因为有16个以上的并行步骤),并一直等待C1/C2/C3。。让我们假设B、C和D是A的下游任务。 我可以创建一个虚拟任务E,它是B、C和D的下游任务

现在我在A中设置了一个ExternalTaskSensor,它等待任务E的上一次执行完成

对于第一次运行,我将手动标记任务成功,但在这之后,A将始终等待上一批任务E的成功执行


我可以使用E中的触发条件,进一步控制B、C和D的状态对任务E的依赖性。

假设B、C和D是A的下游任务。 我可以创建一个虚拟任务E,它是B、C和D的下游任务

现在我在A中设置了一个ExternalTaskSensor,它等待任务E的上一次执行完成

对于第一次运行,我将手动标记任务成功,但在这之后,A将始终等待上一批任务E的成功执行


我可以使用E中的触发条件,进一步控制B、C和D的状态对任务E的依赖性。

ExternalTaskSensor在回填期间创建竞争条件。因为一次运行多个实例,并且依赖于过去,所以是正确的。第一次运行的ExternalTaskSensor完成并移动到实际任务后,它将在第二次运行中触发ExternalTaskSensor,并占用所有插槽。通过ExternalTaskSensor中的
重新调度
模式,我能够解决争用条件。ExternalTaskSensor在回填期间创建争用条件。因为一次运行多个实例,并且依赖于过去,所以是正确的。当第一次运行的ExternalTaskSensor完成并移动到实际任务时,它会在第二次运行中触发ExternalTaskSensor并占用所有插槽。通过ExternalTaskSensor中的
重新调度
模式,我能够解决争用条件。