2012-11-01 77 views
3

我剛開始實現Django + Celery + RabbitMQ來完成一些後端任務。我從示例add(x,y)任務開始,驗證它是否正在工作,然後繼續將現有的實用程序方法放入Celery任務模塊中。麻煩的是,當我調用我的任務時,它們運行良好,但客戶端永遠不會得到結果。Django芹菜任務成功,但客戶端卡住等待

>>> r = SyncUsers.delay() 
>>> r.get() 
... Hangs here forever 
^C 
... (Stack trace omitted) 
KeyboardInterrupt 
>>> r.successful() 
False 

在Celeryd日誌:

[2012-11-01 11:15:23,442: INFO/MainProcess] Task celerytasks.tasks.SyncUsers[9e8f4da3-17d2-4944-9095-51de1afcaaf3] succeeded in 34.596668005s: <website.bullhorn.api.APIResult object at... 

有人知道這裏發生了什麼?

編輯: 就注意到,當我調用get()現在我明白了:

.... \ LIB \站點包\ djcelery \ managers.py:183:TxIsolationWarning:投票結果與事務隔離在同一個事務中可重複讀取可能會給出過時的結果。務必爲每個輪詢迭代提交事務。 「具有事務隔離級別的輪詢結果」

它仍然等待永久。

回答

3

所以有答案。我使用MySQL,所以我需要設置的事務隔離級別爲READ提交的

http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html

也歸功於http://www.no-ack.org/2010/07/mysql-transactions-and-django.html指着我在正確的方向。 (博客似乎已關閉,現在公開訪問)

+0

www.no-ack.org條目似乎受到限制。你能總結一下這個話題嗎? – Shoan

+1

@Shoan它只是指出我的MySQL設置,但我想給信貸。看起來這個博客自我發現以來一直受到限制。 –

+1

該博客帖子的存檔版本:https://web.archive.org/web/20120716043634/http://www.no-ack.org/2010/07/mysql-transactions-and-django.html –