我在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.
答案 0 :(得分:12)
我刚刚完成了这个,所以我可以对此有所了解。人们可能会想到所有伟大的文档,说明其中一些会更明显。
我假设您已经启动了RabbitMQ并且正在运行(它需要运行),并且您已经安装了dj-celery。
完成后,您需要做的就是在setup.py文件中包含这一行。
BROKER_URL = "amqp://guest:guest@localhost:5672//"
然后你需要运行syncdb并使用以下命令启动它:
python manage.py celeryd -E -B --loglevel=info
-E
表示您希望捕获事件以及您希望celerybeats运行的-B
个状态。前者使您能够在管理窗口中实际看到某些内容,后者允许您安排。最后,您需要确保实际上要捕获事件和状态。所以在另一个终端运行这个:
./manage.py celerycam
然后最后你能够看到文档中提供的工作示例.. - 再次假设你创建了task.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交谈。
答案 1 :(得分:1)
你在运行django芹菜吗?
如果是这样,你需要在django(或任何技术术语)的上下文中启动python shell。
输入:
python manage.py shell
从该shell中尝试命令
答案 2 :(得分:0)
HI尝试了一切工作芹菜v3.1.25与Django 1.8版本没有工作.. 最后下线让我感到高兴,
app = Celery('documents',backend="celery.backends.amqp:AMQPBackend")
Setting backend="celery.backends.amqp:AMQPBackend" fixed my error.