芹菜:由于PID变化无法关闭芹菜

时间:2014-09-12 00:18:42

标签: celery django-celery

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

当我按照 manual 中的建议尝试关闭芹菜时,我遇到了问题。

>> 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守护程序一次执行两个工作程序。我怎样才能将其修复为只有一名工人?

1 个答案:

答案 0 :(得分:1)

使用CELERYD_MAX_TASKS_PER_CHILD设置正是您所要求的:

  

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

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

所以,替换

CELERYD_MAX_TASKS_PER_CHILD = 1

CELERYD_CONCURRENCY = 1