2012-12-21 77 views
2

我有RabbitMQ的和芹菜的設置,對4臺機器上運行,每個4個實例的工人。我定義了兩個任務函數,它們基本上調用相同的後端函數,但其​​中一個名爲「process_transaction」,沒有定義rate_limit,另一個名爲「slow_process_transaction」,rate_limit =「6/m」。任務在rabbitmq上進入不同的隊列,慢而正常。影響多個任務芹菜rate_limit

奇怪的是,該rate_limit正在實施的這兩項任務。如果我嘗試使用celery.control.rate_limit更改rate_limit,則使用「process_transaction」執行此操作不會產生任何結果,並且使用「slow_process_transaction」名稱會更改兩者的rate_limit。

什麼是錯的任何想法?

回答

5

通過閱讀鬥源代碼我想通芹菜實現率完成任務後,睡覺的時間增量限制,所以如果你在同一個工人混用不同速率限制的任務,它們相互影響。

分離工人解決我的問題,但它不是最佳的解決方案。

您可以使用您的通話celeryd節點名稱和命名參數分開工人。舉例來說,你有節點「快」和「慢」,你希望他們分別佔用單獨的隊列併發5和1:

celeryd <other opts> -Q:fast fast_queue c:fast 5 -Q:slow slow_queue -c:slow 1 
+0

看起來像我碰到了同樣的問題。謝謝你的提示。如果你不介意分享,你會發現你究竟是如何分割你的工人/隊列的。...... – gingerlime

+1

我剛剛編輯了這篇文章解釋瞭如何。 –

+0

謝謝!非常感激。 – gingerlime