气流在单个DAG中生成动态任务,任务N + 1取决于TaskN

时间:2018-09-28 15:00:25

标签: python airflow

动态生成任务时,我需要让任务2依赖于任务1,任务1 >>任务2或task2.set_upstream(task1)。

由于task_ids是经过评估的,或者似乎是预先确定的,因此我无法提前设置依赖项,因此不胜感激。

Component(I)任务可以很好地运行,只是它们一次运行即可。

for i in range(1,10):
  task_id='Component'+str(i)
  task_id = BashOperator(
  task_id='Component'+str(i),
  bash_command="echo  {{ ti.xcom_pull task_ids='SomeOtherTaskXcom', key='return_value') }} -z " + str(i) ,
  xcom_push=True,
  dag=dag) 
  ?????.set_upstream(??????)

3 个答案:

答案 0 :(得分:2)

使用以下代码:

a = []
for i in range(0,10):
    a.append(BashOperator(
        task_id='Component'+str(i),
        bash_command="echo  {{ ti.xcom_pull task_ids='SomeOtherTaskXcom', key='return_value') }} -z " + str(i) ,
        xcom_push=True,
        dag=dag))
    if i not in [0]: 
        a[i-1] >> a[i]

使用DummyOperator,代码如下:

a = []
for i in range(0,10):
    a.append(DummyOperator(
        task_id='Component'+str(i),
        dag=dag))
    if i not in [0]: 
        a[i-1] >> a[i]

这将生成以下DAG:

enter image description here

答案 1 :(得分:0)

您可以遵循以下模式:

plugins: [
    new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery',
        "uuidv4": "uuid/v4"
    })
]

这将在d1下游生成5个任务。

答案 2 :(得分:0)

使用chain

from airflow.utils.helpers import chain

ops = []
for i in range(0,10):
    ops.append(DummyOperator(
        task_id=f"Component_{i}",
        dag=dag))

chain(ops)
相关问题