gpt4 book ai didi

dst - 如何正确处理Apache Airflow中的夏令时?

转载 作者:行者123 更新时间:2023-12-04 13:36:54 28 4
gpt4 key购买 nike

在 Airflow 中,一切都应该是UTC(不受DST的影响)。

但是,我们有一些工作流根据受DST影响的时区交付内容。

一个示例场景:

  • 我们安排了一个工作,开始时间是美国东部时间8:00 AM,计划时间间隔是24小时。
  • 东部时间每天上午8点,调度程序会看到自上次运行以来已经过了24小时,因此运行了作业。
  • DST发生了,我们损失了一个小时。
  • 今天,东部时间上午8点,调度程序发现只有23小时,因为机器上的时间是UTC,并且直到东部时间9AM才开始运行作业,这是一个延迟交货的

  • 有没有办法安排dag,以便它们在时间更改后在正确的时间运行?

    最佳答案

    从我的头顶上:

    如果您的计算机可识别时区,则将DAG设置为在UTC的EST上午8点和EDT上午8点运行。类似于0 11,12 * * *。让第一个任务是ShortCircuit运算符(operator)。然后使用pytz之类的东西来定位当前时间。如果在您的要求时间内,请继续(IE:运行DAG)。否则,返回False。您每天将有很少的开销,额外执行2个任务,但是只要您的计算机没有过载,延迟就应该是最小的。

    马虎的例子:

    from datetime import datetime
    from pytz import utc, timezone

    # ...

    def is8AM(**kwargs):
    ti = kwargs["ti"]
    curtime = utc.localize(datetime.utcnow())
    # If you want to use the exec date:
    # curtime = utc.localize(ti.execution_date)
    eastern = timezone('US/Eastern') # From docs, check your local names
    loc_dt = curtime.astimezone(eastern)
    if loc_dt.hour == 8:
    return True
    return False

    start_task = ShortCircuitOperator(
    task_id='check_for_8AM',
    python_callable=is8AM,
    provide_context=True,
    dag=dag
    )

    希望这会有所帮助

    编辑:运行时是错误的,减去而不是添加。此外,由于运行方式的不同,如果希望它们在8点运行,您可能最终希望每小时排定7AM。

    关于dst - 如何正确处理Apache Airflow中的夏令时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662571/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com