我是DAG,Airflow和Python语法的新手(我从Java中学到了编码),但是我有一个DAG,其中包含大约10个彼此独立的任务,并且我有另一个DAG,只有在所有10个任务中都可以运行任务很成功。由于我的掌握方式,如果一项任务失败,则DAG仍将运行其他任务,并且DAG被标记为成功。 (我想要的是什么)
是否有一种方法可以使新任务(任务11)通过其他任务并检查其状态?我找不到返回任务状态的函数
我在想类似的事情(假设有一个state()
函数)
array_of_task_ids= [task1, task2, task3,...]
for i in array_of_tasks_ids
if array_of_task_id[i].state() == Failed
#这意味着,如果发现状态为“失败”的任务,它将运行一个新的虚拟任务,指示其中一个任务失败了
task_sensor_failed = DummyOperator(
task_id='task_sensor_failed',
dag=dag,
)
然后在另一个只有在此任务“ task_sensor_failed”未运行的情况下才应运行的DAG上,我将传感器放在
external_sensor= ExternalTaskSensor(
task_id='external_sensor',
external_dag_id='10_tasks_dag',
external_task_id='task_sensor_failed',
... )
这不是我要使用的实际代码。我知道这是不对的,我只是想做一些简单的事情,以便您了解我正在尝试做的事情。我不知道,也许这是一种愚蠢的做法,但是就像我说的那样,我是新手,所以我不确定自己在做什么。
无论如何,总的想法是,如果另一个DAG的所有10个任务都成功了,那么我只能运行DAG,有人可以帮助我实现这一目标吗?对不起,很长的帖子,并感谢您的提前帮助! 有什么建议吗?
答案 0 :(得分:0)
一旦你知道
ExternalTaskSensor
也可以感知整个{em> DAG
(而不是task
中特定于的DAG
) DAG
中的任何一个leaf tasks失败,Airflow就会将其标记为失败(换句话说,只有当所有叶子任务都成功时,Airflow才会将DAG成功标记为一个>
您可以执行此操作,而无需在第一个DAG中添加任何 dummy 任务
这里是
保持第一个DAG不变
使您的第二个DAG以{em>感知第一个DAG的ExternalTaskSensor
开始(只需指定external_dag_id
而不指定external_task_id
)
作为扩展,如果满足您的要求,则可以使您的第一个DAG 主动触发第二个DAG(仅当所有任务都成功完成时),如下所示
在您的第一个DAG中,
TriggerDagRunOperator
(默认)和{li>
upstream_tasks_list >> trigger_task
trigger_dag_id='my_2nd_dag_id'
让您的第二个DAG保持不变