Как учитывать переход на летнее время при использовании расписания cron в Airflow - PullRequest
0 голосов
/ 05 октября 2018

В Airflow я бы хотел, чтобы работа выполнялась в определенное время каждый день в часовом поясе, не связанном с UTC.Как я могу планировать это?

Проблема в том, что после запуска перехода на летнее время моя работа будет выполняться либо на час раньше, либо на час позже. В документах Airflow кажется, что это известная проблема:

Если вы установите расписание cron, Airflow предполагает, что вы всегда захотите работать в одно и то же время,Затем он будет игнорировать летнее время.Таким образом, если у вас есть расписание, которое гласит, что оно выполняется в конце интервала каждый день в 08:00 по Гринвичу + 1, оно всегда будет запускаться в конце интервала 08:00 по Гринвичу + 1, независимо от того, установлено ли время перехода на летнее время.

Кто-нибудь еще сталкивался с этой проблемой?Есть ли работа вокруг?Конечно, лучшей практикой не может быть изменение всех запланированных времен после перехода на летнее время?

Спасибо.

1 Ответ

0 голосов
/ 05 октября 2018

Как вы правильно заметили, учет летнего времени (DST) невозможен, если вы используете расписание cron.Но, начиная с Airflow 1.10, вместо расписания cron вы можете использовать datetime объекты с поддержкой часовых поясов, которые учитывают DST [ 1 ]:

import pendulum

local_tz = pendulum.timezone("Europe/Amsterdam")

default_args=dict(
    start_date=datetime(2016, 1, 1, tzinfo=local_tz),
    owner='Airflow'
)

dag = DAG('my_tz_dag', default_args=default_args)
op = DummyOperator(task_id='dummy', dag=dag)
print(dag.timezone) # <Timezone [Europe/Amsterdam]>
...