次の実行の最初のタスクが実行される前に、DAG内のすべてのタスクをすべて終了させたい。
私にはmax_active_runs = 1がありますが、 this はまだ起こります。
default_args = {
'depends_on_past': True,
'wait_for_downstream': True,
'max_active_runs': 1,
'start_date': datetime(2018, 03, 04),
'owner': 'tin.nguyen',
'email': ['[email protected]'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 3,
'retry_delay': timedelta(minutes=4)
}
dag = DAG('example', default_args=default_args, schedule_interval = schedule_interval)
(私のタスクはすべて前のタスクに依存しています。Airflowのバージョンは1.8.0です)
ありがとうございました
default_argumentsの代わりにDAG()
の引数としてmax_active_runs
を指定するように変更しました。
直接あなたの答えでそれを指していないが、私にアイデアを与えてくれたSimonDに感謝します。
これを行うには、'max_active_runs': 1
をDAGオブジェクトに渡す方法があります。 (1.7.1.3でも)この問題は発生しないため、設定方法に問題があるはずです。
DAGの例を次に示します。
dag_args = {
'owner': 'Owner',
'depends_on_past': False,
'start_date': datetime(2018, 01, 1, 12, 00),
'email_on_failure': False
}
sched = timedelta(hours=1)
dag = DAG(job_id, default_args=dag_args, schedule_interval=sched, max_active_runs=1)
DAGが実行しているタスクが実際にサブDAGである場合、max_active_runs
もサブDAGに渡す必要があるかもしれませんが、これについては100%確実ではありません。
実際には、環境変数としてDAG_CONCURRENCY = 1を使用する必要があります。私のために働いた。
Xcomsを使用してそれを行うことができます。最初に2 python演算子をDAGの「開始」および「終了」として受け取ります。フローを次のように設定します。
開始--->すべてのタスク---->終了
「end」は常に変数をプッシュします
last_success = context ['execution_date'] to xcom(xcom_Push)。 (PythonOperatorsでは、provide_context = Trueが必要です)。
そして、 'start'は常にxcom(xcom_pull)をチェックして、前のDagRunのexecution_dateまたはDAGのstart_date(プロセスを開始させるため)に等しい値を持つlast_success変数が存在するかどうかを確認します。
フォロード この答え