Django Celery任务成功但客户端等待

时间:2012-11-01 11:31:28

标签: python django rabbitmq celery

我刚开始实施Django + Celery + RabbitMQ来执行一些后端任务。我从示例add(x,y)任务开始验证它是否正常工作然后继续将我现有的实用程序方法放在Celery任务模块中。麻烦的是,当我调用我的任务时,它们运行良好,但客户端永远不会得到结果。

>>> 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 \ site-packages \ djcelery \ managers.py:183:TxIsolationWarning:在同一事务中具有事务隔离级别可重复读取的轮询结果可能会给出过时的结果。确保为每个轮询迭代提交事务。   “使用事务隔离级别进行轮询结果”

它仍然等待着。

1 个答案:

答案 0 :(得分:3)

所以有答案。我正在使用MySQL所以我需要将事务隔离级别设置为READ-COMMITTED

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

同样归功于http://www.no-ack.org/2010/07/mysql-transactions-and-django.html,指出我正确的方向。 (博客现在似乎暂不公开访问)