气流:第一个操作员完成后如何并行启动操作员

时间:2018-10-19 08:56:16

标签: airflow

目前,我有一个由4个运算符组成的DAG,如下所示:

with DAG('dag', default_args=args, schedule_interval=schedule_interval, catchup=True) as dag:
main_dag = PythonOperator(
    task_id='1',
    python_callable=func,
    provide_context=True,
    dag=dag)

run_after_main_dag_1 = PythonOperator(
    task_id='1',
    python_callable=foo,
    provide_context=True,
    dag=dag)

run_after_main_dag_2 = BranchPythonOperator(
    task_id='2',
    python_callable=foo,
    provide_context=True)

run_after_main_dag_2_2 = PythonOperator(
    task_id='3',
    python_callable=foo,
    provide_context=False,
    dag=dag)

#this runs sequential, but shouldn't.
main_dag >> run_after_main_dag_1 >> run_after_main_dag_2 >> run_after_main_dag_2_2

这就是我想要实现的目标:

  1. 运行main_dag运算符

  2. main_dag完成后,请并行启动run_after_main_dag_1run_after_main_dag_2,因为它们并不相互独立。

我只是在任何地方的文档中都找不到如何实现此目标的方法。我必须完全忽略一种简单的语法。

有人知道如何实现它吗?

2 个答案:

答案 0 :(得分:1)

所以有一个简单的答案:

main_dag >> run_after_main_dag_1
main_dag >> run_after_main_dag_2 >> run_after_main_dag_2_2

答案 1 :(得分:0)

在气流中>><<用于设置下游和上游依存关系。

您编码

main_dag >> run_after_main_dag_1 >> run_after_main_dag_2 >> run_after_main_dag_2_2 #sequentially

实际上,它定义了随着run_after_main_dag_1的上游设置为main_dag依次运行的关系,依此类推。

为了分隔run_after_main_dag_1run_after_main_dag_2,您可以定义关系,使两者的上游任务都为main_dag

main_dag >> run_after_main_dag_1 # It is just dependent on main_dag
main_dag >> run_after_main_dag_2 # It is just dependent on main_dag

一旦main_dag任务执行完毕,它将并行启动两个任务