我正在使用以下逻辑在运行时更新DAG的调度程序:

now = time.localtime()
sched_interval = '30 6 * * *' if now.tm_isdst else '30 7 * * *'

dag = DAG(
    'my_dag',
    default_args=args,
    schedule_interval=sched_interval,
    max_active_runs=1,
    catchup=False)


问题是:在DST之后,DAG将触发两次,因为调度程序将更新1小时以上。在这种情况下,如何避免运行两次?我正在使用AirFlow 1.9。

谢谢!

最佳答案

Airflow 1.9不提供解决夏时制的功能。它对时区一无所知,并以UTC±00:00运行所有内容。

如您所知,更改时间表间隔以模仿此缺少的功能是有问题的,因为


  更改计划间隔通常需要更改dag_id,因为先前运行的TaskInstances不会与新的计划间隔[1]保持一致


因此,如果可能,最好的解决方案是至少升级到引入timezone-aware DAGs的Airflow 1.10。然后,您可以通过根据需要设置DAG的时区并为计划间隔使用crone表达式来实现所需的目标。

关于python - DST之后,AirFlow DAG运行两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59089526/

10-13 09:16