我试图在 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)' spost_execute()或任务 2的pre_execute()也会有同样的效果。当然,这将涉及为您的任务(1 或 2)修改代码,因此最好避免它
就我个人而言,我更喜欢额外的task方法,因为它使事情更明确并且不会错误地夸大Task 1的运行时间或 任务 2
