CELERYD_CONCURRENCY, - валюта и автомасштаб

У меня есть несколько вопросов относительно маршрутизации задач, параллелизма и производительности. Вот мой вариант использования:

У меня есть один выделенный сервер для выполнения задач сельдерея, поэтому я могу использовать все процессоры для запуска рабочих из сельдерея на этом сервере.

У меня есть много разных задач Python, которые я маршрутизирую, используя: CELERY_ROUTES, и поскольку задачи выполняют действительно разные типы кода Python, я создал 5 разных рабочих. Эти рабочие создаются при развертывании моего проекта с использованием ansible, вот пример:

[program:default_queue-celery]
command={{ venv_dir }}/bin/celery worker --app=django_coreapp --loglevel=INFO --concurrency=1 --autoscale=15,10 --queues=default_queue
environment =
    SERVER_TYPE="{{ SERVER_TYPE }}",
    DB_SCHEMA="{{ DB_SCHEMA }}",
    DB_USER="{{ DB_USER }}",
    DB_PASS="{{ DB_PASS }}",
    DB_HOST="{{ DB_HOST }}"
directory={{ git_dir }}
user={{ user }}
group={{ group }}
stdout_logfile={{ log_dir }}/default_queue.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5
redirect_stderr=true
autostart=true
autorestart=true
startsecs=10
killasgroup=true 

У меня также есть CELERY_QUEUES в settings.py, чтобы установить мост между CELERY_ROUTES и моими программами сельдерея (очереди)

CELERY_DEFAULT_QUEUE = 'default_queue'

И если случится так, что я не перенаправлю задачу, она перейдет в мою 'default_queue'

Чтобы освободить место для всех моих очередей, я установил --concurrency в 1 для default_queue и больше для моей самой важной очереди.

Но мне интересно, влияет ли AutoScale на то же значение, что и параллелизм? Это означает, что если я установлю параллелизм на 1 и --autoscale на 15,10 (пример выше)

Будет ли мой работник "работать" на процессоре и обрабатывать максимум 15 задач на этом процессоре? Или это означает что-то совершенно другое?

1 ответ

Решение

Нет смысла устанавливать оба concurrency а также autoscale поскольку оба являются средством управления количеством рабочих подпроцессов для данного рабочего экземпляра, как описано здесь.

--concurrency N означает, что у вас будет ровно N рабочих подпроцессов для вашего рабочего экземпляра (имеется в виду, что рабочий экземпляр может обрабатывать N сопутствующих задач).

--autoscale max, min значит у тебя будет хотя бы min и самое большее max параллельные рабочие подпроцессы для данного рабочего экземпляра.

На каком процессоре будет запускаться каждый процесс (основной рабочий процесс или любой из его дочерних подпроцессов), это не предсказуемо, это вещь ОС, но не предполагайте, что подпроцессы будут работать на одном и том же процессоре (скорее всего, они не будут - это часть точки наличия параллельных подпроцессов на самом деле).

Другие вопросы по тегам