Воздушный поток: как указать условие для ежечасного рабочего процесса, такого как триггер, только если в данный момент этот экземпляр не запущен? - PullRequest
0 голосов
/ 01 декабря 2018

Я создал рабочий процесс (содержит несколько задач).Это почасовое исполнение.Рабочий процесс должен запускаться, только если другой экземпляр рабочего процесса не запущен одновременно.Если он запущен, выполнение рабочего процесса должно быть пропущено в течение этого часа.

Я проверил с параметром "disabled_on_past", но не смог его получить.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Из официальной документации Airflow для правил триггера :

Значение depends_on_past (логическое), установленное в значение True, не позволяет запускать задачу, если предыдущее расписание для задачине удалось.

Это будет работать, если вы используете его в определении задачи.Вы также можете связать его с wait_for_downstream= True, чтобы гарантировать, что экземпляр нового запуска не начнется, пока не завершится выполнение экземпляра задачи последнего запуска.

task_depends = DummyOperator( task_id= "task_depend", dag= dag, depends_on_past= True )


Однако другой способ обойти это, предполагая, что для работы вам нужен только последний запуск, - это использование Концепция последнего запуска только :

Стандартное поведение рабочего процесса включает выполнение ряда задач для определенной даты./временной интервал.Некоторые рабочие процессы, однако, выполняют задачи, которые не зависят от времени выполнения, но должны выполняться по расписанию, так же, как стандартное задание cron.В этих случаях засыпка или выполнение заданий, пропущенных во время паузы, просто тратит впустую циклы ЦП.

В подобных ситуациях вы можете использовать LatestOnlyOperator, чтобы пропустить задачи, которые не выполняются во время последнего запланированного запуска дляDAG.LatestOnlyOperator пропускает все непосредственные последующие задачи и сам по себе, если время сейчас не находится между его execution_time и следующим запланированным execution_time.

0 голосов
/ 01 декабря 2018

Установите max_active_runs на DAG на 1, а также catchup на False

...