答案 0 :(得分:2)
您将在documents about scheduling backfill and catchup中找到详细的说明。
让我尝试通过一个示例对其进行扩展。
假设今年1月的日历:
January 2018
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
假设您在23日使用start_date=datetime(2018, 1, 1)
和schedule_interval='0 0 * * MON'
添加了DAG。
使用catchup=True
首先解析DAG时,调度程序将立即认识到时段1-1至1-8、1-8至1-15、1-15至1-22已经关闭并通过。从23日添加DAG开始,它将为execution_date
2018-01-01
安排DAG运行。如果有max_active_runs > 2
,它还将为2018-01-08
和2018-01-15
安排DAG运行。
使用catchup=False
首先解析DAG时,调度程序仍会识别出相同的时间段已结束并已过去。但是,它将只为execution_date
2018-01-15
安排DAG运行,从您在23日添加DAG开始。 IE将首先运行最近的关闭时间段,而不运行任何先前的时间段。然后,下一次运行将从2018-01-22
开始的2018-01-29T00:00:00±scheduler_lag
。但是,如果2018-01-15
运行完成之后,您暂停了DAG,然后在2018-01-29T09:00
上将其取消暂停,则调度程序将看到之前有dag运行,并且最近一段时间的开始时间已经过去,就无法在这个错过的时期进行追赶。