在气流中,一切都应该是UTC(不受DST影响).
但是,我们的工作流程基于受DST影响的时区提供服务.
示例场景:
有没有办法安排dags,以便他们在时间变化后的正确时间运行?
脱离我的头顶:
如果您的机器具有时区感知功能,请将DAG设置为在美国东部标准时间上午8点和美国东部夏令时上午8点运行.有点像0 11,12 * * *.让第一个任务成为ShortCircuit操作员.然后使用像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
)
Run Code Online (Sandbox Code Playgroud)
希望这是有帮助的
编辑:运行时错误,减去而不是添加.此外,由于如何启动运行,如果您希望它们以8 运行,您可能最终希望按小时计划安排7AM .
这个问题是在 Airflow 版本 1.8.x 时提出的。
从 Airflow 1.10 开始,此功能现已内置。
https://airflow.apache.org/timezone.html
设置时区airflow.cfg和夏令时应该正确处理。
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |