我正在使用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
BROKER_URL = 'django://'
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
知道为什么会这样吗?感谢
答案 0 :(得分:1)
在使用不同配置后,-Ofair开关解决了我的问题。
python manage.py celery worker -E -Ofair
我不确定底层机制究竟是什么,或者是否有更正确的解决方案,但我很高兴它能够正常运作。