Сельдерей. Уменьшить количество процессов
Есть ли способ ограничить число работников в celery? У меня небольшой сервер, и сельдерей всегда создает 10 процессов на 1 ядре процессора. Я хочу ограничить это число тремя процессами.
Ответы
Ответ 1
Я попробовал установить concurrency 1 и max_tasks_per_child в 1 в моем файле settings.py и одновременно запускал 3 задачи. Он просто порождает 1 процесс как Пользователь, а второй 2 - как сельдерей. Он должен просто запустить 1 процесс, а затем дождаться его завершения, прежде чем запускать другой.
Я использую сельдерей джанго.
ИЗМЕНИТЬ {
Я назначил concurrency, написав CELERYD_CONCURRENCY = 1 в файле settings.py. Но когда я посмотрел файл журнала сельдерея, используя "tail -f/var/log/celery/w1.log", я увидел значение 8, присвоенное concurrency. Это сказало мне, что setup.py не изменяет concurrency.
Чтобы устранить эту проблему, я добавил следующие строки в файл "/etc/default/celeryd".
# Extra arguments to celeryd
CELERYD_OPTS="--concurrency=1"
Теперь вторая задача в очереди ждет, пока не будет завершена первая.
}
Ответ 2
Параметр celery worker - concurrency позволяет указать количество дочерних процессов, обрабатывающих очередь.
Ответ 3
У меня это в моем файле celeryd-config
CELERYD_NODES=2
что приводит к
$ ps -ef | grep "celery" | grep -v "grep"
www-data 1783 1 0 17:50 ? 00:00:46 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid
www-data 1791 1783 0 17:50 ? 00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid
www-data 1802 1 0 17:50 ? 00:00:52 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid
www-data 1858 1802 0 17:50 ? 00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid
Есть четыре процесса, а не два, но есть два сотрудника. Похоже, что каждый рабочий поток имеет два процесса. Предположительно, если вы установите CELERYD_NODES на 3, вы получите 3 рабочих, но 6 процессов.