2012-11-01 40 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 –