Как задать количество параллельных процессов для воркера в Celery

«Как задать количество параллельных процессов для воркера в Celery» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Количество параллельных процессов для воркера Celery задается параметром concurrency. Это определяет, сколько задач воркер может выполнять одновременно.

Существует несколько способов его настройки:

  1. Через флаг командной строки (самый частый способ): Используйте флаг --concurrency или его короткую версию -c при запуске воркера.

    celery -A my_project worker --loglevel=info --concurrency=8
  2. Через конфигурационный файл: Укажите значение в настройках Celery (например, в celeryconfig.py).

    # celeryconfig.py
    worker_concurrency = 8
  3. Через переменные окружения: Celery может считывать некоторые настройки из переменных окружения.

    export CELERY_WORKER_CONCURRENCY=8
    celery -A my_project worker --loglevel=info

Рекомендации по выбору значения

  • CPU-bound задачи (интенсивные вычисления): concurrency должно быть равно количеству ядер CPU на машине.
  • I/O-bound задачи (сетевые запросы, работа с файлами/БД): concurrency можно ставить значительно выше количества ядер (например, 16, 32, 100+), так как процессы будут часто простаивать в ожидании ответа. В этом случае также рекомендуется использовать пулы на основе gevent или eventlet (--pool=gevent) для более эффективной работы с I/O.