我正在使用django&芹菜,执行许多长期任务。它在带有CentOS的4核服务器上运行。
最初,我使用了默认的django经纪人(broker_url ='django://'),它运行得很好。但是我想要事件和监视,所以我尝试切换到redis或兔子。
REDIS和RABBITMQ的工作,从某种意义上说,他们最终执行所有任务,但是与Django经纪人不同,他们有时只使用一些内核,有时甚至只使用1(!),而其他核心则闲着。<<<<<<<<<<<<<<<<<<<<<<<<<<<<
我希望再次强调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(perfect)
BROKER_URL = 'django://'
redis(mishaving)
BROKER_URL = 'redis://localhost:6379/0'
兔子(Mishaving)
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
知道为什么会发生这种情况吗?谢谢
在玩不同配置后, - 折叠开关解决了我的问题。
python manage.py celery worker -E -Ofair
我不确定什么是基本机制,或者是否有更正确的解决方案,但我很高兴它有效。