Python 任务成功/失败时重新安排DAG

Python 任务成功/失败时重新安排DAG,python,airflow,airflow-scheduler,airflow-operator,Python,Airflow,Airflow Scheduler,Airflow Operator,考虑一个非常简单的Apache DAG: FileSensor -> PythonOperator 其中,FileSensor正在等待一些文件出现(相对较短的poke_间隔),而PythonOperator处理这些文件。这个DAG被安排在@一次无限期运行-我如何设置它在成功(或失败)后从PythonOperator内重新安排运行?一般来说,我认为Elad的建议可能有效,但我认为这是一个不好的做法。DAG按设计(和名称)是非循环的,因此在其中创建任何类型的循环都可能导致其行为异常 此外,根

考虑一个非常简单的Apache DAG:

FileSensor -> PythonOperator

其中,
FileSensor
正在等待一些文件出现(相对较短的
poke_间隔
),而
PythonOperator
处理这些文件。这个DAG被安排在
@一次
无限期运行-我如何设置它在成功(或失败)后从
PythonOperator
内重新安排运行?

一般来说,我认为Elad的建议可能有效,但我认为这是一个不好的做法。DAG按设计(和名称)是非循环的,因此在其中创建任何类型的循环都可能导致其行为异常

此外,根据气流文档,如果计划使用外部dag触发器,则应将dag明细表设置为“无”。就个人而言,我不确定它是否一定会破坏某些东西,但它肯定会给你带来意想不到的输出。如果出现问题,以后调试它可能也会花费更长的时间


我认为最好的方法是你尝试重新思考你的设计。如果您需要在发生故障时重新安排dag,您可以利用传感器的重新安排模式。不知道为什么您希望在成功后重新运行它,如果源代码中有多个文件,我会说宁愿在dag脚本中创建多个具有可变参数和for循环的传感器。

一般来说,我认为Elad的建议可能行得通,但我认为这是一种不好的做法。DAG按设计(和名称)是非循环的,因此在其中创建任何类型的循环都可能导致其行为异常

此外,根据气流文档,如果计划使用外部dag触发器,则应将dag明细表设置为“无”。就个人而言,我不确定它是否一定会破坏某些东西,但它肯定会给你带来意想不到的输出。如果出现问题,以后调试它可能也会花费更长的时间


我认为最好的方法是你尝试重新思考你的设计。如果您需要在发生故障时重新安排dag,您可以利用传感器的重新安排模式。不知道为什么要在成功后重新运行它,如果源代码中有多个文件,我会说,宁愿在dag脚本中创建多个具有可变参数和for循环的传感器。

正如建议的那样,这是一种方法。结合
reset\u dag\u run
execution\u date
参数,我能够解决这个问题。

正如建议的那样,这是解决问题的方法。结合
reset\u dag\u run
execution\u date
参数,我能够解决这个问题。

从未尝试过这一点,但可能设置触发同一dag的TriggerDagRunOperator的第三个任务可能会起作用。try:
TriggerDagRunOperator(task\u id='trigger',dag\u id='your\u dag\u id')
从未尝试过此操作,但设置TriggerDagRunOperator的第三个任务以触发相同的dag可能会起作用。试试:
TriggerDagRunOperator(task\u id='trigger',dag\u id='your\u dag\u id')
基本思想是在文件到达文件夹时持续处理文件。因此,在
trigger\u dag->sense\u file(s)->process->dag\u完成后
我只想重新运行它,以便能够感知未来传入的文件。基本思想是在文件到达文件夹后继续处理文件。因此,在
trigger\u dag->sense\u file(s)->process->dag\u完成后
我只想重新运行它,以便能够检测将来传入的文件。