Мой пример использования следующий:
Task A
генерирует dataset
с использованием некоторых исходных необработанных данных
Task B
выполняет некоторый код, используя dataset
в качестве ввода
Task C
выполняет какой-то другой код, используя dataset
в качестве ввода
Три задачи запланированы для ежедневного выполнения, а Task B
и Task C
запланированы для запуска достаточное время после Task A
, и они просто не выполняются, если входной набор данных не был сгенерирован для некоторых причина.
В качестве первого улучшения я добавил ExternalTaskSensor
в Task B
и Task C
, но это просто позволяет избежать их запуска, если Task A
еще не завершен или не выполнен.
Тем не менее, ExternalTaskSensor
, кажется, не работает нормально с обратной засыпкой (это довольно хрупко, поскольку зависит только от дата выполнения , плюс, если Task A
будет запущен снова, Task B
и Task C
не узнают).
Решение 1 (не применимо):
Я видел вопрос этого SO: В потоке воздуха, есть ли хороший способ вызвать задачу другого дага?
Это не идеально для меня, потому что я хотел бы оставить Task A
в неведении зависимых задач и обрабатывать логику в Task B
и Task C
(или внешне). Причина в том, что в будущем будут добавлены другие задачи, использующие вывод Task A
(из разных групп организации), и нежелательно каждый раз обновлять Task A
.
Резюме
Я хотел бы вызвать Task B
и Task C
, если и только если Task A
был выполнен с успехом (независимо, если он был запланирован или запущен вручную), без изменения Task A
для достижения этого.