气流调度程序不尊重 EndTime 与 datetime.now()+timedelta() [英] Airflow Scheduler Not Respecting EndTime with datetime.now()+timedelta()

查看:22
本文介绍了气流调度程序不尊重 EndTime 与 datetime.now()+timedelta()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试安排一个 dag 每 x 秒运行一次.我把开始时间作为过去的日期,catchup = False,结束时间为未来几秒钟.

I am trying schedule a dag to run every x seconds. I put the start time as a past date with catchup = False and end time as few seconds into the future.

尽管 dag 按预期开始,但它并没有结束并且永远持续下去.

Although the dag starts as expected, it does not end and goes on forever.

如果我使用像 datetime(2019,9,26) 这样的绝对结束时间,但不使用 datetime.now()+timedelta(seconds=100),则 dag 结束>

The dag ends if I use an absolute end time like datetime(2019,9,26) but not with datetime.now()+timedelta(seconds=100)

start_date = datetime(2019, 1, 1)
end_date = datetime.now()+timedelta(seconds=200)

default_args = {
    "owner": "airflow",
    "depends_on_past": True,
    "start_date": start_date,
    "end_date": end_date
}

dag = DAG("file_dag", catchup=False, default_args=default_args, schedule_interval=timedelta(seconds=20), max_active_runs=1)

我希望 dag 在运行 10 或 11 次后停止执行,具体取决于它何时启动.但它在运行 20 次后仍然继续执行并且似乎没有停止.

I expect the dag to stop executing after may be 10 or 11 runs depending on when it started. But it keeps executing even after 20 runs and does not seem to stop.

推荐答案

不能/不得使用 start_dateend_date 表达式

您观察到的行为非常明显:

The behaviour that you are observing is pretty obvious:

您的 DAG 文件每 X 秒解析一次

Your DAG files are parsed every X seconds

  • 在解析 dag 定义文件的每个周期中,end_date 都会更新为 当前时间后 200 秒.由于 dag-definition-file(s) 的解析永远持续下去,end_date 不断变化,你会得到一个 永无止境的 dag

  • On each cycle of parsing of your dag-definition file, the end_date gets updated to 200 seconds after current time. Since parsing of dag-definition-file(s) goes on forever, the end_date keeps shifting and you get a never-ending dag

    这篇关于气流调度程序不尊重 EndTime 与 datetime.now()+timedelta()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆