Сельдерей. Уменьшить количество процессов

Есть ли способ ограничить число работников в 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 процессов.