2013-10-09 80 views
0

幾乎是一個確切的副本this SO question,但答案並沒有幫助我。我已經安裝了Erlang,Celery和RabbitMQ,併成立了Celery來使用AMQP作爲後端和代理。我完全按照quickstart example(創建一個添加兩個數字的任務),但是當我發佈result.ready()命令時,Celery進程只是掛起。芹菜掛在準備好()

  • 這不是一個auth問題(四檢查和測試無效登錄)
  • 這不是一個磁盤空間不足的錯誤按照以前的SO問題(免費> 800MB)
  • 工人已經啓動並運行( 「消費者:隨時接受任務!」)
  • 的MQ啓動並運行( 「經紀人運行」)
  • 我可以看到芹菜連接到RabbitMQ的( 「接受AMQP連接(IP - > IP)」)
  • 我認爲這是我的Python腳本不是con的問題正確地向芹菜工作人員過程。難道是因爲我試圖在Raspberry Pi上運行它?可用內存的操作系統非常低。

我在這裏撕掉我的頭髮。任何幫助歡迎!

+0

消費者是否開始執行任務?在任務完成後嘗試獲得結果,或者消費者根本沒有收到任務時,它會掛起嗎? – Clara

+0

沒有消費者(工人)根本沒有收到任務,這表明經紀人的溝通失敗,我想。在Redis中使用相同的代碼而不是RabbitMQ,因此這不是代碼問題。 – keithl8041

+0

您是否嘗試使用以下內容列出隊列內容:rabbitmqadmin list queues - >以查看消息是否在您的隊列中?如果他們沒有聯繫到您的消費者並且發佈商發佈了它們,那麼當您列出隊列時,它們仍應該在隊列中可見。 – Clara

回答

0

經過大量的反覆試驗後,我發現在celeryconfig.py中加入以下內容導致致電ready()返回True。也許不是一個理想的解決方案,但至少有一個解決方案可以不被卡住並返回適當的值。

CELERY_ALWAYS_EAGER = True 

之前實施這種解決方法(不是一個真正的解決方案,在我眼裏)你應該閱讀docs,以確保你明白這是什麼呢;

... tasks will be executed locally instead of being sent to the queue.

這首先否定了使用芹菜的原因,所以最終我放棄了使用Redis代替AMQP。奇蹟般有效。