Планировщик воздушного потока не соблюдает EndTime с помощью datetime.now () + timedelta () - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь запланировать запуск dag каждые x секунд.Я указываю время начала как прошедшую дату с catchup = False, а время окончания - через несколько секунд в будущем.

Хотя метка начинается, как и ожидалось, она не заканчивается и продолжается вечно.

Табличка заканчивается, если я использую абсолютное время окончания, например datetime (2019,9,26) , но не с datetime.now () + timedelta (секунд = 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 запусков и, похоже, не останавливается.

1 Ответ

0 голосов
/ 25 сентября 2019

Вы не можете / не должны использовать datetime.now() в start_date и end_date выражениях


Наблюдаемое вами поведение довольно очевидно:

  • Напомним, что файлы определения dag постоянно анализируются в фоновом режиме. Раздел [6] Ограничение количества переменных потока воздуха в вашей группе обеспечения доступности баз данных в Поток воздуха: менее известные советы, рекомендации и рекомендации говорит

    Ваши файлы DAGанализируется каждые X секунд

  • При каждом цикле анализа файла определения dag end_date обновляется до 200 секунд после текущего времени .Поскольку синтаксический анализ файлов определений дагов продолжается вечно, конечная дата смещается, и вы получаете бесконечный даг

...