【问题标题】:AirFlow DAG running twice after DSTAirFlow DAG 在 DST 后运行两次
【发布时间】:2019-11-30 21:38:54
【问题描述】:

我正在使用如下逻辑更新我的 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)

问题是:夏令时后,DAG 会触发两次,因为调度器会再更新 1 小时。在这种情况下如何避免运行两次?我正在使用 AirFlow 1.9。

谢谢!

【问题讨论】:

    标签: python airflow airflow-scheduler


    【解决方案1】:

    Airflow 1.9 不提供考虑夏令时的功能。它对时区一无所知,并以 UTC±00:00 运行一切。

    正如您所发现的,更改计划间隔以尝试模拟这种缺失的功能是有问题的,因为

    更改调度间隔总是需要更改 dag_id,因为之前运行的 TaskInstances 不会与新的调度间隔对齐 [1]

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

    【讨论】:

      【解决方案2】:

      Airflow documentation 说:

      如果您设置了 cron 计划,Airflow 会假定您总是希望在完全相同的时间运行。然后它将忽略夏令时。因此,如果您有一个计划,说明在每天 08:00 GMT+1 间隔结束时运行,则无论是否有夏令时,它总是会在 08:00 GMT+1 间隔结束时运行。

      在我看来,这似乎暗示您不需要测试 DST,因为它会自动转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多