Airflow:延迟一天DAG运行的标准方法是什么?

时间:2018-03-15 08:31:24

标签: airflow airflow-scheduler

我有一个DAG计划每天运行。在大多数情况下,调度程序会在execution_date完成后立即触发此作业,即第二天。但是,由于上游延迟,我只想在execution_date之后的三天内开始execution_date的dag运行。换句话说,我想介绍一个三天的滞后。

根据我已经完成的研究,一条路线就是在我的dag运行开始时使用TimeDeltaSensor添加delta=datetime.timedelta(days=3)

然而,由于Airflow调度程序的实施方式,这是有问题的。在这种方法下,我的每个DAG运行将超过三天。我的DAG有很多任务,如果有几个DAG运行是活动的,我注意到调度程序占用了大量CPU,因为它不断迭代所有这些任务(甚至是非活动任务)。那么还有另一种方法可以告诉调度程序在三天过去之前不启动DAG运行吗?

2 个答案:

答案 0 :(得分:2)

在DAG中操作日期变量可能更容易。

我假设您将以某种方式在任务实例中使用执行日期ds,例如查询给定日期的数据。

在这种情况下,您可以使用内置宏来操作macros.ds_add(ds, -3)之类的日期,只需将日期调整为减去3天。

您可以像往常一样在模板字段'{{ macros.ds_add(ds, -3) }}'

中使用它

宏文档here

答案 1 :(得分:0)

一种可能的解决方案是将max_active_runs设置为1用于DAG。虽然这不会阻止DAG在3天内处于活动状态,但这会阻止多个DAG运行的启动。