Airflow Scheduler不尊重datetime.now()+ timedelta()的结束时间

时间:2019-09-25 19:17:22

标签: airflow

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

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

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

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次后它仍会继续执行,而且似乎没有停止。

1 个答案:

答案 0 :(得分:0)

您在datetime.now()start_date表达式中cannot / must not use end_date


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

  • 回想一下dag定义文件是在后台连续解析的。 第[6]节,限制DAG中的气流变量数量Airflow: Lesser Known Tips, Tricks and Best Practices中说

      

    您的DAG文件每隔X秒分析一次

  • 在解析dag-definition文件的每个循环中,end_date都会更新为当前时间后200秒。由于dag-definition-file(s)的解析将永远进行,因此end_date不断变化,您会得到 never-end dag