Airflow 如何限制气流一次只运行一个DAG运行实例?

Airflow 如何限制气流一次只运行一个DAG运行实例?,airflow,Airflow,我希望DAG中的所有任务都在下一次运行的第一个任务执行之前完成 我有max_active_runs=1,但仍然发生 default_args = { 'depends_on_past': True, 'wait_for_downstream': True, 'max_active_runs': 1, 'start_date': datetime(2018, 03, 04), 'owner': 'tin.nguyen', 'email': ['tin.nguyen@example.com'], '

我希望DAG中的所有任务都在下一次运行的第一个任务执行之前完成

我有max_active_runs=1,但仍然发生

default_args = {
'depends_on_past': True,
'wait_for_downstream': True,
'max_active_runs': 1,
'start_date': datetime(2018, 03, 04),
'owner': 'tin.nguyen',
'email': ['tin.nguyen@example.com'],
'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)
(我的所有任务都依赖于上一个任务。气流版本为1.8.0)


谢谢

您可以使用XCOM来完成。首先将2个python操作符作为DAG的“开始”和“结束”。将流设置为:

开始-->所有任务-->结束

“end”将始终推送一个变量

last_success=xcom的上下文['execution_date']。(在PythonOperators中需要提供_context=True)

“开始”将始终检查xcom(xcom\u pull),以查看是否存在值等于上一个DagRun的执行日期或DAG的开始日期的最后一个成功变量(以允许进程开始)


在之后,您已将
'max\u active\u runs':1
放在
默认参数中,而不是放在正确的位置

max\u active\u runs
是DAG的构造函数参数,不应放入
default\u args
字典中

以下是一个示例DAG:

dag_args={
“所有者”:“所有者”,

#“max#u active_runs”:1,#我改为将
max#u active_runs
作为
DAG()
的参数,而不是默认_参数中的参数,它起了作用


感谢SimonD给了我这个想法,尽管在你的回答中没有直接指向它。

实际上,你应该使用DAG\u CONCURRENCY=1作为环境变量。对我有效。

我将max\u active\u runs作为默认参数传递。我想知道这是否是问题所在。我将尝试在DAG函数中传递它,看看它是否有效。如果你想将其设置为对于所有DAG,您可以使用set似乎是一个很有前途的解决方法。我们将尝试此方法。DAG_并发指定在DAG中同时运行的任务实例数,而不是我所理解的DAG实例数。