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隊列中是否有要處理的任務。就像每個工作人員只能在內存中保存四個任務結果,並且永遠不會沖洗它,直到芹菜重新啓動,然後刷新並取出一個新的結果。但是所有的處理都正確。