【问题标题】:Celery : cannot shutdown celery due to PID changesCelery:由于 PID 变化而无法关闭 celery
【发布时间】:2014-11-06 01:50:24
【问题描述】:

我正在使用 Cerely 来管理我的 django 项目的延迟任务。

当我尝试按照 manual 中的建议关闭 celery 时遇到问题。

>> ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9
   kill: No such process
>> ps auxww | grep 'celery worker' | awk '{print $2}
   28630
>> ps auxww | grep 'celery worker' | awk '{print $2}
   28633

PID 不断变化,很难发送杀死信号。

我该如何解决这个问题?提前致谢。


[更新]

django settings.py

import djcelery

    djcelery.setup_loader()
    BROKER_URL = 'amqp://guest:guest@localhost:5672/' # Using RabbitMQ
    CELERYD_MAX_TASKS_PER_CHILD = 1

PID 检查(重启后)

>> ps auxww | grep 'celery worker' | awk '{print $2}'
   3243
>> manage.py celery worker --loglevel=info
   celery@{some id value}.... ready
>> ps auxww | grep 'celery worker' | awk '{print $2}'
   3285
   3293
   3296
>> ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9
   kill: No such process
>> ps auxww | grep 'celery worker' | awk '{print $2}'
   3321
>> ps auxww | grep 'celery worker' | awk '{print $2}'
   3324

问题

  • 即使重新启动,至少还有一名芹菜工人。并且它的PID不断变化。
  • Celery 守护程序同时执行两个工作程序。我怎样才能将它修复到只有一名工人?

【问题讨论】:

  • 工人似乎正在重新启动。它真的有效吗,即执行任务?如果是,您是否使用--maxtasksperchild / CELERYD_MAX_TASKS_PER_CHILD 运行它?
  • 感谢@VasiliyFaronov。我添加了关于我的问题的更多详细描述。

标签: celery django-celery


【解决方案1】:

CELERYD_MAX_TASKS_PER_CHILD 设置正是您所要求的:

池工作进程在被新进程替换之前可以执行的最大任务数。

显然您想运行一个工作进程,但它由不同的设置控制,即CELERYD_CONCURRENCY

所以,替换

CELERYD_MAX_TASKS_PER_CHILD = 1

CELERYD_CONCURRENCY = 1

【讨论】:

  • 按照您的建议,我将 CELERYD_MAX_TASKS_PER_CHILD 替换为 CELERYD_CONCURRENCY。但是重新启动后并没有改变。我不知道。
  • 即使我 (pip) 卸载了 celery,命令 ps auxww | grep 'celery worker' | awk '{print $2}' 也会返回一些不断变化的 ID。
  • @UKS 哦,我忘记了通常的麻烦:你得到的 PID 是 grep 进程本身的 PID。添加| grep -v grep,或使用pgrep
  • 谢谢。你的回答很有帮助!
猜你喜欢
  • 2014-12-24
  • 2014-11-04
  • 1970-01-01
  • 2019-07-21
  • 2022-10-19
  • 2020-11-25
  • 2021-01-10
  • 2020-04-06
相关资源
最近更新 更多