【问题标题】:Django Celery tasks succeed but client stuck waitingDjango Celery 任务成功但客户端卡住等待
【发布时间】:2012-10-21 23:38:06
【问题描述】:

我刚刚开始实现 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:在同一事务中使用事务隔离级别可重复读取的轮询结果可能会给出过时的结果。确保为每次轮询迭代提交事务。 "事务隔离级别的轮询结果"

它仍然会永远等待。

【问题讨论】:

    标签: python django rabbitmq celery


    【解决方案1】:

    于是就有了答案。我使用的是 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 为我指明了正确的方向。 (博客现在似乎不对公众开放)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    相关资源
    最近更新 更多