使用redis或rabbitmq时,芹菜不使用所有核心

时间:2014-01-21 09:32:50

标签: python django celery

我正在使用django& amp;编写一个构建服务器。芹菜,执行许多长期任务。它运行在带有centos的4核服务器上。

最初,我使用默认的django代理(BROKER_URL ='django://'),它运行得很好。但我想要事件和监控,所以我试图切换到redis或rabbitmq。

redis和rabbitmq都工作,因为它们最终会执行所有任务,但与django代理不同,它们有时只使用一些内核,有时甚至只使用1(!),而其他内核则无所事事。 / p>

我希望再次强调django经纪人总是正确地利用所有核心,我唯一改变的就是经纪人。

我的配置是标准配置(除了有两个队列):

CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = ( 
    Queue('default',    routing_key='task.#'), 
    Queue('new_batches', routing_key='new_batch.#'), 
)
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1

Django(完美)

BROKER_URL = 'django://'

Redis(mishaving)

BROKER_URL = 'redis://localhost:6379/0'

兔子(不活动)

BROKER_URL = 'amqp://user:pass@localhost:5672/scourge'
CELERY_BACKEND = "amqp"
CELERY_RESULT_BACKEND = "amqp"
CELERY_TASK_RESULT_EXPIRES = 60*60 * 24*7   # results expire after a week 

知道为什么会这样吗?感谢

1 个答案:

答案 0 :(得分:1)

在使用不同配置后,-Ofair开关解决了我的问题。

python manage.py celery worker -E -Ofair

我不确定底层机制究竟是什么,或者是否有更正确的解决方案,但我很高兴它能够正常运作。