气流会选择动态生成的计划间隔吗?

Will airflow pick up dynamically generated schedule interval?

我已经 运行 airflow 1.9.0 并使用动态生成的计划间隔。

简单地说,我从一些配置文件中获取一个 US/Eastern 时间戳,获取当前系统时区(可以是 EDT 或 EST),然后将其转换为 UTC 时间,然后转换为 cron 表达式。

例如,如果我今天(美国东部时间 2018 年 7 月 23 日)启动 dag 并且我的输入是早上 6 点 US/Eastern,它会产生一个调度间隔为世界标准时间上午 10 点或 0 10 * * 1-5.

我的问题是: 如果我每天离开 dag 运行,它的时间表会在 11 月夏令时结束时自动更新到 0 11 * * 1-5 吗?

我特别想避免在安排这些 dag 时使用 tz 感知日期时间,这就是为什么我想出了这种时间戳转换的 hacky 方式。

您使用什么库或代码在东部时间戳和生成 cron 表达式之间进行转换?我认为回答你问题的这一部分取决于这些信息。

无论如何,这个想法对我来说有点像代码味道。虽然它在技术上可行,但假设您的库正确支持该用例并且时区库保持最新,我相信您最好采用标准路线来确定您想要的 crontab 计划并使用它始终如一。

不使用本地时区也是最佳做法,例如,在您将服务器从东部移动到太平洋或在不同时区运行多个服务器的情况下 — 在任何地方使用 UTC 都可以在扩展时保持简单.

由于 UTC 没有夏令时,这将帮助您避免诸如 DST 错误之类的问题,如果不使用 UTC,您将不得不解决这些问题。

此外,Airflow 官方文档建议不要使用简单的日期时间:

Because Airflow uses time-zone-aware datetime objects. If your code creates datetime objects they need to be aware too.

...

Although Airflow operates fully time zone aware, it still accepts naive date time objects for start_dates and end_dates in your DAG definitions. This is mostly in order to preserve backwards compatibility.

...

Unfortunately, during DST transitions, some datetimes don’t exist or are ambiguous. In such situations, pendulum raises an exception. That’s why you should always create aware datetime objects when time zone support is enabled.

https://github.com/apache/incubator-airflow/blob/master/docs/timezone.rst

您能否详细说明使用原始日期时间与时区感知日期时间的用例?我很乐意就此添加更具体的建议。