我希望在下一次运行的第一个任务执行之前,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': ['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)
谢谢
答案 0 :(得分:5)
我改为将max_active_run作为DAG()的参数而不是default_arguments,并且它有效。感谢SimonD给了我这个想法,虽然没有在你的回答中直接指出它。
答案 1 :(得分:3)
将'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正在运行的任务实际上是子标记,那么你可能还需要将max_active_runs
传递给子标记,但不是100%肯定。
答案 2 :(得分:0)
您可以使用xcoms来执行此操作。首先将2个python运算符作为DAG的“开始”和“结束”。将流程设置为:
开始--->所有任务---->端
'end'将始终推送变量
last_success = context ['execution_date']到xcom(xcom_push)。 (PythonOperators中需要provide_context = True)。
并且'start'将始终检查xcom(xcom_pull)以查看是否存在last_success变量,其值等于前一个DagRun的execution_date或DAG的start_date(让进程启动)。
答案 3 :(得分:0)
实际上,您应该使用DAG_CONCURRENCY = 1作为环境变量。为我工作。