【问题标题】:How do I set a backend for django-celery. I set CELERY_RESULT_BACKEND, but it is not recognized如何为 django-celery 设置后端。我设置了 CELERY_RESULT_BACKEND,但无法识别
【发布时间】:2012-05-26 11:23:58
【问题描述】:

我在 celeryconfig.py 中设置了 CELERY_RESULT_BACKEND = "amqp" 但我明白了:

>>> from tasks import add
>>> result = add.delay(3,5)
>>> result.ready()

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/result.py", line 105, in ready
    return self.state in self.backend.READY_STATES
  File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/result.py", line 184, in state
    return self.backend.get_status(self.task_id)
  File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/backends/base.py", line 414, in _is_disabled
    raise NotImplementedError("No result backend configured.  "
NotImplementedError: No result backend configured.  Please see the documentation for more information.

【问题讨论】:

  • 你是否从与 celeryconfig.py 相同的目录运行 python shell?

标签: rabbitmq celery django-celery


【解决方案1】:

我刚刚经历了这个,所以我可以对此有所了解。人们可能会认为,对于所有说明其中一些内容的优秀文档来说,这会更加明显。

我假设你已经启动并运行了 RabbitMQ(它需要运行),并且你已经安装了 dj-celery

一旦你有了它,那么你需要做的就是在你的 setting.py 文件中包含这一行。

BROKER_URL = "amqp://guest:guest@localhost:5672//"

然后你需要运行 syncdb 并使用:

python manage.py celeryd -E -B --loglevel=info

-E 表示您希望捕获事件,-B 表示您希望 celerybeats 运行。前者使您可以在管理窗口中实际看到某些内容,而后者使您可以安排时间。最后,您需要确保您确实要捕获事件和状态。所以在另一个终端运行这个:

./manage.py celerycam

最后您可以看到文档中提供的工作示例。- 再次假设您创建了所说的 tasks.py。

>>> result = add.delay(4, 4)
>>> result.ready() # returns True if the task has finished processing.
False
>>> result.result # task is not ready, so no return value yet.
None
>>> result.get()   # Waits until the task is done and returns the retval.
8
>>> result.result # direct access to result, doesn't re-raise errors.
8
>>> result.successful() # returns True if the task didn't end in failure.
True

此外,您还可以在管理面板中查看您的状态。

我希望这会有所帮助!我会再添加一件对我有帮助的事情。 查看 RabbitMQ 日志文件是关键,因为它帮助我确定 django-celery 实际上是在与 RabbitMQ 对话。

【讨论】:

  • 我运行了 rabbitmq 并安装了 django-celery,但我没有运行 django-celery。
【解决方案2】:

你在运行 django celery 吗?

如果是这样,您需要在 django(或任何技术术语)的上下文中启动一个 python shell。

类型:

python manage.py shell

然后从那个 shell 中尝试你的命令

【讨论】:

    【解决方案3】:

    HI 尝试了一切使 celery v3.1.25 与 Django 1.8 版本一起工作,但没有任何效果.. 终于下线帮助了我,感觉很开心

    app = Celery('documents',backend="celery.backends.amqp:AMQPBackend")
    Setting backend="celery.backends.amqp:AMQPBackend"  fixed my error.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 2017-01-04
      • 2017-06-08
      • 2020-06-18
      • 1970-01-01
      • 2015-03-26
      • 2012-11-29
      • 2015-01-09
      相关资源
      最近更新 更多