是否有一种方法可以控制气流障碍中特定任务的并行性?例如。说我有一个模糊的定义,例如...
for dataset in list_of_datasets:
# some simple operation
task_1 = BashOperator(task_id=f'task_1_{dataset.name}', ...)
# load intensive operation
task_2 = BashOperator()
# another simple operation
task_3 = BashOperator()
task_1 >> task_2 >> task_3
有没有一种方法可以使task_1可以在dag实例中运行5种同类任务,而在task实例中可以仅运行2个task_2实例(这也意味着如果有2个实例,则可以运行) task_2已经在运行,那么task_1只有3个实例可以运行)?有其他通用方法可以解决这种需求(我想管道必须经常提出这种要求)?
答案 0 :(得分:0)
从有关Apache airflow电子邮件列表的讨论中...
您可以使用池(https://airflow.apache.org/docs/stable/concepts.html#pools)来限制给定池可以并行运行多少个任务。
因此,您可以创建具有任务数限制的命名“池”(通过Web服务器管理菜单) 然后在创建任务时将这些任务分配给dag定义文件中的那些池
for dataset in datasets:
high_load_task = BashOperator(
task_id='high_load_task_%s' % dataset["id"],
bash_command='some_command',
pool='example_pool',
trigger_rule=TriggerRule.ALL_SUCCESS,
dag=dag)
还...
还有另一种限制任务并行性的方法-适用于例如您拥有具有不同功能的不同类型机器(例如具有/不具有GPU)的情况。您可以在任务和执行任务的实际计算机之间定义一些关联-在Celery执行器中,您可以在celery配置中定义队列,您可以将任务分配给其中一个队列。然后,您可以为队列中的所有计算机定义多个工作器/插槽,并且实际上,您还可以通过以下方式限制任务的并行性:https://airflow.apache.org/docs/stable/concepts.html#queues