【发布时间】:2013-06-12 18:48:18
【问题描述】:
如何确保 celeryd 仅作为单个进程运行?当我运行 manage.py celeryd --concurrency=1 然后 ps aux | grep celery 我看到 3 个实例正在运行:
www-data 8609 0.0 0.0 20744 1572 ? S 13:42 0:00 python manage.py celeryd --concurrency=1
www-data 8625 0.0 1.7 325916 71372 ? S 13:42 0:01 python manage.py celeryd --concurrency=1
www-data 8768 0.0 1.5 401460 64024 ? S 13:42 0:00 python manage.py celeryd --concurrency=1
我注意到 celerybeat 也存在类似问题,它总是作为 2 个进程运行。
【问题讨论】:
-
您如何/在哪里打电话给
python manager.py celeryd...?不确定这是否是问题所在,但如果您的 django 在 apache 后面运行,并且 apache 在多进程模式下运行,则每个 apache 进程可能正在启动它自己的 celeryd。 -
@mklauber,我通过 supervisord 使用命令
python manage.py celeryd --concurrency=1调用它 -
看起来应该有 n+1 个进程,因为 Celery 启动了一个主进程和几个工作子进程。因此,您在 celerybeat 中看到的内容是预期的,但是使用 --concurrency=1 您仍然应该看到 2 个工作进程而不是 3 个。您使用的是哪个版本的 Celery? Celery 3.0.19 对我来说没有问题。另外,Celery 是否在标准输出的某处告诉您“并发:1(进程)”?
-
我遇到了类似的问题。我什至尝试设置 --maxtasksperchild=1,但是当我启动 celeryd 守护进程时仍然得到 3 个 python 进程。
标签: python django celery django-celery celeryd