Python 任务成功/失败时重新安排DAG
考虑一个非常简单的Apache 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按设计(和名称)是非循环的,因此在其中创建任何类型的循环都可能导致其行为异常 此外,根
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完成后
我只想重新运行它,以便能够检测将来传入的文件。