Вы найдете расширенное объяснение в документах о планировании обратной засыпки и захвата .
Позвольте мне попытаться раскрыть его на примере.
Предположим, этокалендарь на январь этого года:
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
Допустим, вы добавили DAG 23-го числа с start_date=datetime(2018, 1, 1)
и schedule_interval='0 0 * * MON'
.
С catchup=True
при первом разборе DAG-планировщика.немедленно распознает, что периоды с 1-1 по 1-8, с 1-8 по 1-15, с 1-15 по 1-22 закрыты и прошли.Он запланирует запуск группы доступности базы данных для execution_date
2018-01-01
, начиная с добавления группы доступности базы данных 23-го числа.Если есть max_active_runs > 2
, он также запланировал бы запуск группы обеспечения доступности баз данных для 2018-01-08
и 2018-01-15
.
При catchup=False
при первом анализе группы доступности базы данных планировщик все равно распознает, что те же периоды были закрыты и прошли,Но он запланировал бы запуск группы доступности базы данных только для execution_date
2018-01-15
, начиная с добавления группы доступности базы данных 23-го числа.То есть сначала будет выполняться самый последний закрытый период, а не предыдущие периоды.Следующим запуском будет 2018-01-22
, начиная с 2018-01-29T00:00:00±scheduler_lag
.Но если после выполнения 2018-01-15
вы приостановите DAG, а затем отмените его на 2018-01-29T09:00
, планировщик увидит, что есть предыдущие прогоны DAG, и что время начала самого последнего периода уже прошло, он не будетзапустите прогон этого пропущенного периода.