У меня есть рабочий процесс 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, что определяет число и как я могу его контролировать?