Что контролирует рабочие потоки сельдерея? - PullRequest
0 голосов
/ 14 марта 2019

У меня есть рабочий процесс Celery, который был запущен с помощью этой команды:

celery multi start worker --app=xyz.celery --queue="xyz"
--pidfile="/var/run/xyz/%n.pid"
--pool=gevent --concurrency=500 --time-limit=1800

У меня есть задачи, которые безопасны для параллелизма Gevent, но не для потоков ОС, и я вижу периодически возникающую ошибку, котораяпредполагает, что они запускаются несколькими потоками ОС.

Глядя на рабочий процесс, он, похоже, имеет в общей сложности 7 потоков:

$ ps -ef | grep "celery worker"
nobody   26577     1  0 Mar06 ?        00:46:43 /usr/bin/python -m celery worker
--time-limit=1800 --concurrency=500 --pool=gevent --app=xyz.celery
--queue=xyz --pidfile=/var/run/xyz/xyz-worker.service.pid --hostname=worker@xyz

$ cat /proc/26577/status
Name:   python
...
...
Threads:    7
...

(я также могу видеть через ps -T или через htop, что рабочий имеет эти 7 потоков)

На других серверах, где у меня аналогичные настройки, у меня 4 потока вместо 7. Я не могу понять, что контролирует это.Я не вижу в документации по сельдерею ничего такого, что объясняет это.

Все мои серверы имеют 4 процессора, так что это явно не так.Из всего, что я прочитал, это должен быть только один поток, поскольку я сказал ему использовать gevent для параллелизма.

Почему используется более 1, что определяет число и как я могу его контролировать?

1 Ответ

0 голосов
/ 18 марта 2019

Оказывается, что эти потоки поддерживаются Gevent, но они не используются для запуска кода пользователя :

По умолчанию gevent создает потоки для обработки разрешения DNS в Кооперативная мода (незаметно для звонящего). gevent будет никогда работать пользовательский код в отдельном потоке неявно, не будучи явно поручено сделать это путем прямого использования пула потоков

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...