[英]Airflow / Python - How to resume DAG flow based on external process
Using Airflow 1.8.0 and python 2.7
具有以下 DAG(简化):
(Phase 1)-->(Phase 2)
在第 1 阶段,我触发了一个耗时的异步进程,最多可以运行 2 天,当进程结束时,它会在 S3 上写入一些有效负载。 在那个时期,我希望 DAG 等待并仅在 S3 有效负载存在时继续进行第 2 阶段。
我想到了2个解决方案:
我不能使用选项 1,因为我的管理员不允许使用实验性 API,选项 2 似乎是一个不好的做法(检查每 X 小步舞曲)。
还有其他选择可以解决我的任务吗?
我认为选项(2)是“正确的方法”,您可以对其进行一些优化:
BaseSensorOperator支持poke_interval
,因此它应该可用于S3KeySensor
以增加尝试之间的时间。
Poke_interval - 作业应在每次尝试之间等待的时间(以秒为单位)
此外,您可以尝试使用mode
并将其切换到reschedule
:
模式:传感器的工作方式。 选项是:
{ poke | reschedule }
{ poke | reschedule }
,默认是poke
。 当设置为poke
,传感器在整个执行时间内占用一个工作槽,并在poke
之间休眠。 如果传感器的预期运行时间较短或需要较短的戳击间隔,请使用此模式。 请注意,在此模式下,传感器将在传感器运行时保持工作槽和池槽。 当设置为reschedule
,传感器任务会在尚未满足条件时释放工作槽,并在稍后重新调度。 如果预计满足条件之前的时间很长,请使用此模式。 poke 间隔应超过一分钟,以防止调度程序负载过多。
不确定 Airflow 1.8.0 - 找不到旧文档(我假设支持poke_interval
,但不支持mode
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.