2017-07-04 13 views
1

我有幾個關於任務路由,併發和性能的問題。 這裏是我的用例:CELERYD_CONCURRENCY, - 併發性和自動調整

我有一個專用的服務器來運行芹菜任務,所以我可以使用所有的CPU在這臺服務器上運行芹菜工人。

我有很多不同的Python任務,我路由使用:CELERY_ROUTES,因爲任務執行真正不同類型的Python代碼,我創建了5個不同的工作。 這些工人都當我使用ansible部署我的項目創建,這裏有一個例子:

[program:default_queue-celery] 
command={{ venv_dir }}/bin/celery worker --app=django_coreapp --loglevel=INFO --concurrency=1 --autoscale=15,10 --queues=default_queue 
environment = 
    SERVER_TYPE="{{ SERVER_TYPE }}", 
    DB_SCHEMA="{{ DB_SCHEMA }}", 
    DB_USER="{{ DB_USER }}", 
    DB_PASS="{{ DB_PASS }}", 
    DB_HOST="{{ DB_HOST }}" 
directory={{ git_dir }} 
user={{ user }} 
group={{ group }} 
stdout_logfile={{ log_dir }}/default_queue.log 
stdout_logfile_maxbytes=50MB 
stdout_logfile_backups=5 
redirect_stderr=true 
autostart=true 
autorestart=true 
startsecs=10 
killasgroup=true 

我也曾經在settings.py一個CELERY_QUEUES使CELERY_ROUTES和我的芹菜程序(隊列)

之間的橋樑
CELERY_DEFAULT_QUEUE = 'default_queue' 

而且如果真的發生了,我不路由任務就會去我的「DEFAULT_QUEUE」

爲了給空間我所有的隊列中,我設置--concurrency爲1 DEFAULT_QUEUE,且多爲我最重要的隊列。

但我想知道,AutoScale是否對併發性具有同樣的影響?意思是,如果我將併發性設置爲1,並將--autoscale設置爲15,10(以上示例)

我的工作人員是否在CPU上工作並在此CPU上處理最多15個任務? 或者這是否意味着完全不同的東西?

回答

2

設置concurrencyautoscale都沒有意義,因爲它們都是控制給定工人實例的工作程序子進程數的手段,as explained here

--concurrency N意味着您的工作者實例(意味着工作者實例可以處理N個concorgnt任務)只有N個工人子進程。

--autoscale max, min表示您將至少有min和最多max給定工作者實例的併發工作程序子進程。每個進程(主工作進程或它的任何子進程)將運行在哪個CPU上是不可預測的,這是一個操作系統的事情,但不要假設子進程都會在同一個CPU上運行(很可能他們贏得了「 t - 這是實際併發子進程的一部分)。

+0

感謝您提供這些非常需要的信息。 因此,這兩個值都會定義我做'htop'時看到的processus數目? 那麼可以在settings.py中設置的CELERYD_CONCURRENCY如何被自動縮放覆蓋,如--concurrency是? – MiniYuuzhan