現在、DAGのノードは、そのDAGの残りのノードが終了する前に、翌日のタスクに進みます。残りのDAGが終了するのを待ってから、次の日のDAGサイクルに移動する方法はありますか?
(私はdepends_on_pastをtrueとして持っていますが、この場合は機能しません)
私のDAGは次のようになります。
O
l
V
O -> O -> O -> O -> O
また、ダグのツリービュー写真]
この回答には少し遅れるかもしれませんが、同じ問題が発生し、それを解決する方法は、各データに2つのタスクを追加することです。最初は「前へ」、最後は「完了」。前のタスクは、前のジョブを監視する外部タスクセンサーです。 Completeは単なるダミー演算子です。 30分ごとに実行されるため、dagは次のようになります。
dag = DAG(dag_id='TEST_DAG', default_args=default_args, schedule_interval=timedelta(minutes=30))
PREVIOUS = ExternalTaskSensor(
task_id='Previous_Run',
external_dag_id='TEST_DAG',
external_task_id='All_Tasks_Completed',
allowed_states=['success'],
execution_delta=timedelta(minutes=30),
dag=DAG
)
T1 = BashOperator(
task_id='TASK_01',
bash_command='echo "Hello World from Task 1"',
dag=dag
)
COMPLETE = DummyOperator(
task_id='All_Tasks_Completed',
dag=DAG
)
PREVIOUS >> T1 >> COMPLETE
したがって、次のダグは、キューに入ったとしても、PREVIOUSが完了するまでタスクを実行させません。
一度に1つのインスタンスだけを実行する場合は、max_active_runs = 1を設定してみてください