我刚刚开始实现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:在同一事务中使用事务隔离级别repeatable-read的轮询结果可能会给出过时的结果。确保为每个轮询迭代提交事务。“使用事务隔离级别轮询结果”
但它仍然会永远等待。
发布于 2012-11-01 20:50:51
这就是答案。我使用的是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,他为我指明了正确的方向。(博客现在似乎对公众关闭了访问)
https://stackoverflow.com/questions/13176133
复制相似问题