我有一个DAG计划每天运行。在大多数情况下,调度程序会在execution_date
完成后立即触发此作业,即第二天。但是,由于上游延迟,我只想在execution_date
之后的三天内开始execution_date
的dag运行。换句话说,我想介绍一个三天的滞后。
根据我已经完成的研究,一条路线就是在我的dag运行开始时使用TimeDeltaSensor
添加delta=datetime.timedelta(days=3)
。
然而,由于Airflow调度程序的实施方式,这是有问题的。在这种方法下,我的每个DAG运行将超过三天。我的DAG有很多任务,如果有几个DAG运行是活动的,我注意到调度程序占用了大量CPU,因为它不断迭代所有这些任务(甚至是非活动任务)。那么还有另一种方法可以告诉调度程序在三天过去之前不启动DAG运行吗?
答案 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运行的启动。