簡體   English   中英

當使用Redis或Rabbitmq時,Celery不會利用所有內核

[英]Celery doesn't utilize all cores, when using redis or rabbitmq

我正在使用django和celery編寫構建服務器,該服務器執行許多長任務。 它在具有centos的4核服務器上運行。

最初,我使用默認的django代理(BROKER_URL ='django://'),並且運行良好。 但是我想要事件和監視,所以我嘗試切換到Redis或Rabbitmq。

從某種意義上說,redis和rabbitmq都可以最終執行所有任務,但是與django broker不同,它們有時僅利用某些內核,有時甚至只使用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(完美)

BROKER_URL = 'django://'

Redis(除雜)

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 

知道為什么會這樣嗎? 謝謝

經過不同的配置,-Ofair開關解決了我的問題。

python manage.py celery worker -E -Ofair

我不確定確切的底層機制是什么,或者不確定是否有更正確的解決方案,但是我很高興它能起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM