2014-02-25 55 views
2

Celery突然間開始在我們身邊行動並停止提取任務。Celery在重啓之前沒有記錄返回值或獲取新任務

信息:

  • 我們使用芹菜3.0.10
  • 我們使用Django的芹菜3.0.10
  • 我們正在使用的RabbitMQ。

問題:重新啓動之前

芹菜不是從任務日誌輸出(日誌級別INFO)。這將是確定的,但它不會在重新啓動之前獲取新任務。沒有,任務沒有死鎖,我在返回打印到日誌的布爾值之前有一個打印。

例子:

@task() 
def my_task(username): 
    print "Start" 
    result = api_call(username) 
    print "Finished", result 
    return result 

在我們看到的日誌:

[2014-02-25 20:45:28,300: INFO/MainProcess] Got task from broker: my_project.my_app.my_task[475ff845-6a63-4b7b-9e02-4ce198043707] 
[2014-02-25 20:45:29,667: WARNING/Worker-X] Start 
[2014-02-25 20:45:29,667: WARNING/Worker-X] Finished, True 

然後什麼。直到我重新啓動:

[2014-02-25 21:08:15,081: INFO/MainProcess] Task my_project.my_app.my_task[475ff845-6a63-4b7b-9e02-4ce198043707] succeeded in 1392992732.81s: True 
... 

其中三個點表示從券商等有任務的下一次迭代這是一樣的,不管我們有多少工人,他們就會併發做到這一點。

任何想法爲什麼?

編輯:

調查更多我意識到,每個工人鎖定前到底需要四個任務,我的回報每個工人之前拿到打印,所以沒有任務實際上是鎖定後。在重新啓動後記錄所有四個任務返回值,並查看Rabbit隊列中是否有要處理的任務。就像每個工作人員只能在內存中保存四個任務結果,並且永遠不會沖洗它,直到芹菜重新啓動,然後刷新並取出一個新的結果。但是所有的處理都正確。

回答

0

原來,我的芹菜版本和Kombu版本可以訪問,這是一件很有趣的事情。它不適用於目前在回購中的任何版本的Kombu(需要更舊的版本),所以升級芹菜和kombu工作。

相關問題