Airflow 通过for循环在动态生成任务后执行单个任务

Airflow 通过for循环在动态生成任务后执行单个任务,airflow,airflow-scheduler,Airflow,Airflow Scheduler,假设我有以下DAG(基本占位符函数),它使用for循环动态生成任务(通过迭代列表): 来自气流导入DAG 从afflow.operators.python_operator导入PythonOperator 默认参数={ “所有者”:“用户”, “依赖于过去”:False, “开始日期”:日期时间(2019、12、16、0、0、0), '电子邮件':['xxx@xxx.com'], “失败时发送电子邮件”:False, “重试时发送电子邮件”:False, “重试”:1, “重试延迟”:时间增量(

假设我有以下DAG(基本占位符函数),它使用for循环动态生成任务(通过迭代列表):

来自气流导入DAG
从afflow.operators.python_operator导入PythonOperator
默认参数={
“所有者”:“用户”,
“依赖于过去”:False,
“开始日期”:日期时间(2019、12、16、0、0、0),
'电子邮件':['xxx@xxx.com'],
“失败时发送电子邮件”:False,
“重试时发送电子邮件”:False,
“重试”:1,
“重试延迟”:时间增量(分钟=5)
}
dag=dag('xxx',catchup=False,
默认参数=默认参数,计划间隔=0*/4***')
#一些伪函数
def第一步(x):
打印(x)
def step2():
打印(“好的,我们完成了所有步骤1。”)
some_list=[1,2,3,4,5,6]
对于某些列表中的t:
task_id=f'FirstStep_{t}
任务=蟒蛇算子(
任务id=任务id,
python_callable=StepOne,
提供上下文=False,
op_kwargs={'x':str(t)},
dag=dag
)
任务
我想介绍一些简单的附加任务:

task2=PythonOperator(
任务\u id=“第二步”,
python_callable=step2,
提供上下文=False,
dag=dag
)
只有在第一个步骤中的所有步骤都完成后,才会运行。线性地,这将是
task>>task2


如何执行此操作?

您可以将任务依赖关系与阵列关联起来

在taskA和taskB完成后执行taskC

[taskA,taskB]>>taskC

taskA完成后,并行执行taskB和taskC

taskA>>[taskB,taskC]

只要上游或下游的一侧是非阵列

因此,以你为例

task1 = []
for t in some_list:
    task_id = f'FirstStep_{t}'
    task1.append(PythonOperator(
        task_id=task_id,
        python_callable=StepOne,
        provide_context=False,
        op_kwargs={'x': str(t)},
        dag=dag))

task2 = PythonOperator(
    task_id="SecondStep",
    python_callable=StepTwo,
    provide_context=False,
    dag=dag)

task1 >> task2

你确定这样行吗?部署DAG时,我得到了>>的错误
task1>>task2不支持的操作数类型:'list'和'list'
my
task1
task2
都是列表类型(在概念上,我希望所有的步骤都在<代码> TASK1<代码>中运行,然后在 Task2 List> >列表中的所有步骤都是不允许的。上游/下游的1方必须是非阵列的。哦,有趣!您能在链的中间放置一些虚拟操作符任务吗?或者其他选项是Task1和Task2。如果您感兴趣,请查看此示例。此示例在两个subgrag之间有一个运算符,但是,您可以直接执行subdag>>subdag。