Airflow 为特定任务控制每个dag的任务并行度?

Airflow 为特定任务控制每个dag的任务并行度?,airflow,Airflow,是否有方法控制气流dag中特定任务的并行性?假设我有一个dag定义,比如 对于数据集列表中的数据集: #一些简单的操作 task_1=bash运算符(task_id=f'task_1{dataset.name}',…) #负荷密集型运行 task_2=bash运算符() #另一个简单的操作 task_3=bash运算符() 任务1>>任务2>>任务3 有没有一种方法可以让task_1在一个dag实例中运行,比如说,5个类似的实例,而在一个dag实例中只能运行task_2的2个实例(也就是说,如

是否有方法控制气流dag中特定任务的并行性?假设我有一个dag定义,比如

对于数据集列表中的数据集:
#一些简单的操作
task_1=bash运算符(task_id=f'task_1{dataset.name}',…)
#负荷密集型运行
task_2=bash运算符()
#另一个简单的操作
task_3=bash运算符()
任务1>>任务2>>任务3

有没有一种方法可以让task_1在一个dag实例中运行,比如说,5个类似的实例,而在一个dag实例中只能运行task_2的2个实例(也就是说,如果task_2已有2个实例在运行,那么task_1只能运行3个实例)?任何其他解决此类需求的常用方法(我想这必须经常出现在管道中)?

来自apache airflow电子邮件列表上的讨论

您可以使用pools()来限制给定池可以并行运行的任务数量

因此,您可以创建具有任务计数限制的命名“池”(通过webserver管理菜单) 然后在创建dag定义文件时将这些任务分配给这些池

对于数据集中的数据集:
高负载任务=bash运算符(
task_id='high_load_task'%s'%dataset[“id”],
bash_command='some_command',
pool='example_pool',
trigger\u rule=TriggerRule.ALL\u成功,
dag=dag)
还有

还有另一种方法可以限制任务的并行性-例如,在您拥有具有不同功能的不同类型的机器的情况下(例如,使用/不使用GPU)。可以在任务和执行它们的实际机器之间定义一些相似性-在芹菜执行器中,可以在芹菜配置中定义队列,并可以将任务分配给其中一个队列。然后,您可以为队列中的所有机器定义多个工作线程/插槽,因此您还可以通过以下方式限制任务的并行性: