2013-02-27 40 views
15

在爲celeryd的多文檔,我們發現這個例子:在芹菜中,讓多個工人處理同一隊列的目的是什麼?

# Advanced example starting 10 workers in the background: 
# * Three of the workers processes the images and video queue 
# * Two of the workers processes the data queue with loglevel DEBUG 
# * the rest processes the default' queue. 
$ celeryd-multi start 10 -l INFO -Q:1-3 images,video -Q:4,5 data 
    -Q default -L:4,5 DEBUG 

(從這裏開始:http://docs.celeryproject.org/en/latest/reference/celery.bin.celeryd_multi.html#examples

會是什麼,爲什麼這將是很好的有一個以上的工人一個實際的例子在單個主機上處理相同的隊列,如上例所示?這不是設置併發的目的嗎?

更具體而言,會有任何實際以下兩行之間(A和B)的區別?:

答:

$ celeryd-multi start 10 -c 2 -Q data 

B:

$ celeryd-multi start 1 -c 20 -Q data 

我擔心我錯過了一些有關任務隊列的有價值的知識,因爲我不瞭解這個實際區別,如果有人能夠啓發我,我將不勝感激。

謝謝!

回答

8

會是什麼,爲什麼這將是很好的有一個以上的工人更 上一臺主機處理相同的隊列,如 例如上面一個實際的例子?

答:

所以,你可能要在同一臺機器 節點上運行多個實例的工人如果:

  • 您使用的是多池,並想消費消息並行。有些人使用多個工作人員報告更好的性能,而不是使用多個工作人員池運行單個實例。

  • 您正在使用eventlet/gevent(以及由於臭名昭着的GIL,也是'線程'池),並且您想要在多個CPU內核上執行任務。

參考:http://www.quora.com/Celery-distributed-task-queue/What-is-the-difference-between-workers-and-processes