我在DAG中并行执行以下2个任务 在现实世界中,这些任务可能是15或20个任务,其输入参数来自数组,如下所示。
fruits = ["apples", "bananas"]
bad_dag = DAG('bad_dag_3', default_args=default_args, schedule_interval=None)
t0=BashOperator(
task_id="print",
bash_command='echo "Beginning parallel tasks next..." ',
dag=bad_dag)
t1=BashOperator(
task_id="fruit_"+fruits[0],
params={"fruits": fruits},
bash_command='echo fruit= {{params.fruits[0]}} ',
dag=bad_dag)
t2=BashOperator(
task_id="fruit_"+fruits[1],
params={"fruits": fruits},
bash_command='echo fruit= {{params.fruits[1]}} ',
dag=bad_dag)
t0>>[t1, t2]
对我来说,编写此DAG的最佳方法是什么,所以我不必像上面一样重复一遍又一遍地重写同一BashOperator。
我不能使用循环,因为如果使用循环,则无法并行化任务。
答案 0 :(得分:0)
使用以下DAG。想法是,每个任务的task_id
应该是唯一的,其余部分将由气流处理。
fruits = ["apples", "bananas"]
bad_dag = DAG('bad_dag_3', default_args=default_args, schedule_interval=None)
t0=BashOperator(
task_id="print",
bash_command='echo "Beginning parallel tasks next..." ',
dag=bad_dag)
for fruit in fruits:
task_t = BashOperator(
task_id="fruit_"+fruit,
params={"fruit": fruit},
bash_command='echo fruit= {{params.fruit}} ',
dag=bad_dag)
t0 >> task_t