6

我在 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.
4

3 回答 3

12

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

我假设你已经启动并运行了 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

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

Django 任务管理器

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

于 2012-05-26T14:24:29.933 回答
1

你在运行 django celery 吗?

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

类型:

python manage.py shell

并从该外壳尝试您的命令

于 2012-05-26T04:53:15.293 回答
0

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.
于 2018-03-26T15:50:47.943 回答