【问题标题】:Celeryd launching too many processesCeleryd 启动了太多进程
【发布时间】: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


【解决方案1】:

根据this链接..进程数为4:一个主进程,两个子进程和一个celerybeat进程, 此外,如果您使用 FORCE_EXECV,则会有另一个进程开始清理信号量。

如果你使用 celery+django-celery 开发,并且使用 RabbitMQ 或 Redis 作为代理,那么它不应该使用更多 多于一个额外线程(如果设置了 CELERY_DISABLE_RATE_LIMITS,则没有)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2021-05-05
    相关资源
    最近更新 更多