Airflow 气流控制器触发具有未来执行日期的目标DAG;目标DAG档位

Airflow 气流控制器触发具有未来执行日期的目标DAG;目标DAG档位,airflow,apache-airflow,airflow-scheduler,Airflow,Apache Airflow,Airflow Scheduler,我有一个控制器DAG(SampleController),它将调用目标DAG(SampleWait),两者的开始日期都是datetime.now(),计划间隔都是None 我从命令行或Web服务器UI触发控制器DAG,它将在我的系统时区中立即运行,执行日期为“立即”。在截图中,时间是17:25——这不是我的“真实”UTC时间;这是我的当地时间 但是,当为目标创建触发的DAG运行时,执行日期将“调整”为UTC时间,无论我如何尝试操纵开始日期-它将始终在未来(此处为21:25)。在我的例子中,它是四

我有一个控制器DAG(SampleController),它将调用目标DAG(SampleWait),两者的开始日期都是datetime.now(),计划间隔都是None

我从命令行或Web服务器UI触发控制器DAG,它将在我的系统时区中立即运行,执行日期为“立即”。在截图中,时间是17:25——这不是我的“真实”UTC时间;这是我的当地时间

但是,当为目标创建触发的DAG运行时,执行日期将“调整”为UTC时间,无论我如何尝试操纵开始日期-它将始终在未来(此处为21:25)。在我的例子中,它是四个小时以后,所以目标DAG只是坐在那里什么也不做。我实际上在控制器中有一个传感器,它等待目标DAG完成,所以那个家伙也会无缘无故地进行轮询

当我运行控制器目标模式时,甚至Github中的示例也显示出完全相同的行为,我找不到任何关于如何实际处理此问题的适当文档,只是这是一个“陷阱”

奇怪的是,气流似乎知道我的时区,并在一个操作员内进行调整,但在我从命令行或web服务器UI执行此操作时却不知道

有什么好处


在许多地方(博客、SO等),不建议使用“动态”datetime.now()date作为DAG开始日期(请考虑DAG代码何时运行以及如何使用)。作为最佳实践,您可能不希望使用朴素的datetime对象,而是始终设置tzinfo,除非您正在进行一些本地化显示,否则最好使用utc。如果您提供更多关于您的用例的信息,我可能能够就如何继续提出建议,但这里是基于假设的:将开始日期设置为过去。设置时间间隔=None@Nick,我能够理解这一点,并离开了datetime.now()。本质上,我有一个轮询ExternalTaskSensor,它正在阻塞(在我的测试中没有使用芹菜执行器),它的优先级权重和比我想首先触发的另一个任务更高。谢谢你的指导!好消息!也许你可以回答/删除这个问题并结束这个问题?