2012-03-14 84 views
0

我有兩種類型的任務,一種是由用戶生成的,另一種是以大批量創建的。任務將分隔隊列(「短」和「長」) 當一個隊列中存在任務時(即那個龐大的批次),Celery只會獲取那些完全忽略另一個隊列的任務,直到整個批處理完成。從許多隊列中獲取任務

Example: 
send 100 slow tasks to "long" queue 
send 100 small tasks to "short" queue 
send 100 slow tasks to "long" queue 
send 100 small tasks to "short" queue 

Celery behaviour: 
process 100 tasks form "long" queue 
process 100 tasks form "short" queue 
process 100 tasks form "long" queue 
process 100 tasks form "short" queue 

即使當我爲慢速任務設置rate_limit時,也會發生這種情況,即「長」隊列。我所得到的只是緩慢的任務阻塞系統時間更長:/ 有沒有辦法確保Celery從所有隊列中獲取任務? (我用芹菜2.5.1的RabbitMQ)

+0

這可能是由於使用默認交換引起的(兩者相同)? – Fuxi 2012-03-16 13:02:25

回答

0

可以啓動單獨的芹菜工人爲每個隊列:

$ celeryd -Q短

$ celeryd -Q長

在這種情況下,每種類型的任務將由獨立的工作人員獨立處理。

+0

這是我暫時的解決方案。我用相當通用的方式提出了問題。因爲我至少有3個隊列,而且只會隨着時間增加。爲什麼在芹菜不能處理任務後(由於速率限制),停止尋找它可以處理的任務(即在其他隊列中)? – Fuxi 2012-03-15 17:29:16

+0

Thak you 0x00mh,看起來像目前唯一合理的解決方案。如果我能找到更好的問題,我會更新這個問題。 – Fuxi 2012-03-19 10:09:09