Skip to main content
 首页 » 编程设计

python之Apache Airflow : Delay a task for some period of time

2025年05月04日25dflying

我试图在 DAG 中的父任务 5 分钟后执行任务。

DAG:任务 1 ----> 等待 5 分钟 ----> 任务 2

如何在 Apache Airflow 中实现这一点?提前致谢。

请您参考如下方法:

上述行为可以通过引入一个任务来实现,该任务会在您的Task 1 和Task 2

之间强制延迟指定的持续时间

这可以通过使用 PythonOperator 来实现

import time 
from airflow.operators.python import PythonOperator 
 
delay_python_task: PythonOperator = PythonOperator(task_id="delay_python_task", 
                                                   dag=my_dag, 
                                                   python_callable=lambda: time.sleep(300)) 
 
task_1 >> delay_python_task >> task_2 

或使用 BashOperator还有

from airflow.operators.bash import BashOperator 
delay_bash_task: BashOperator = BashOperator(task_id="delay_bash_task", 
                                             dag=my_dag, 
                                             bash_command="sleep 5m") 
task_1 >> delay_bash_task >> task_2 

注意:给定的代码片段未经过测试


引用资料


UPDATE-1

这里有一些引入延迟的其他方式

  • 更新:不要将其用作 pointed out by @Vit.ai . 原点:on_success_callback/on_failure_callback :根据 Task 2 是否应该在 Task 1 成功或失败时运行,您可以传递 lambda: time.sleep(300)在 Task 1 的任一参数中。
  • pre_execute()/post_execute():在 Task 1 中调用 time.sleep(300)' s post_execute()或 任务 2 的 pre_execute()也会有同样的效果。当然,这将涉及为您的任务(1 或 2)修改代码,因此最好避免它

就我个人而言,我更喜欢额外的task方法,因为它使事情更明确并且不会错误地夸大Task 1的运行时间或 任务 2