Ответ
Да, автоматическое масштабирование воркеров Celery настраивается с помощью флага --autoscale при запуске. Этот механизм позволяет воркеру динамически изменять количество дочерних процессов в зависимости от нагрузки.
Синтаксис:
--autoscale=MAX,MIN
MAX: максимальное количество процессов.MIN: минимальное количество процессов, которое будет работать при отсутствии задач.
Пример запуска:
celery -A your_project_app worker --loglevel=INFO --autoscale=10,3
В этом примере воркер запустит 3 процесса по умолчанию. При увеличении количества задач в очереди он будет создавать новые процессы, пока их общее число не достигнет 10. При снижении нагрузки количество процессов будет уменьшаться обратно до 3.
Важные ограничения:
- Пул процессов: Автомасштабирование работает только с пулом
prefork(используется по умолчанию). - Несовместимость: Не поддерживается для пулов
eventletиgevent.
Для более гибкого масштабирования, особенно в облачных средах, часто используют внешние инструменты, такие как Kubernetes Horizontal Pod Autoscaler (HPA), который управляет количеством подов с воркерами Celery на основе метрик CPU или длины очереди.