Ответ
Пул (Pool) в Apache Airflow — это механизм для ограничения количества одновременно выполняемых задач, которые к нему отнесены. Основная задача пулов — контролировать нагрузку на внешние системы и управлять конкурентным доступом к ограниченным ресурсам.
Каждому пулу назначается определенное количество слотов. Когда задача, назначенная пулу, запускается, она занимает один слот. Если в пуле нет свободных слотов, задача будет ожидать в очереди, пока другой слот не освободится.
Зачем это нужно?
Представьте, что у вас есть несколько DAG, которые активно обращаются к API внешнего сервиса, допускающего не более 5 одновременных запросов. Без пулов вы рискуете превысить лимит и получить ошибки. Создав пул с 5 слотами и назначив ему все задачи, работающие с этим API, вы гарантируете, что Airflow никогда не отправит более 5 запросов одновременно.
Как использовать:
- Создание пула: Пулы создаются через UI Airflow (
Admin -> Pools
) или через CLI. - Назначение задачи пулу: В коде DAG для оператора указывается параметр
pool
.
Пример:
from airflow.operators.bash import BashOperator
from airflow.models.dag import DAG
import pendulum
# Предполагается, что пул 'api_pool' с 5 слотами уже создан в UI
with DAG(
dag_id='example_pool_dag',
start_date=pendulum.datetime(2023, 1, 1, tz="UTC"),
schedule=None,
catchup=False
) as dag:
task_1 = BashOperator(
task_id='task_using_api_1',
bash_command='echo "Calling API..." && sleep 5',
pool='api_pool' # Назначаем задачу в пул
)
task_2 = BashOperator(
task_id='task_not_in_pool',
bash_command='echo "Just a regular task..." && sleep 1',
# Эта задача использует default_pool
)
По умолчанию все задачи используют default_pool
, у которого 128 слотов.