Celery with RabbitMQ:AttributeError:'DisabledBackend'对象没有属性'_get_task_meta_for'
我正在运行芹菜教程的第一步 。
我们定义以下任务:
from celery import Celery app = Celery('tasks', broker='amqp://guest@localhost//') @app.task def add(x, y): return x + y
然后调用它:
>>> from tasks import add >>> add.delay(4, 4)
但是我得到以下错误:
AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for'
我正在运行芹菜工和rabbit-mq服务器。 奇怪的是,芹菜工作者报告这个任务是成功的:
[2014-04-22 19:12:03,608: INFO/MainProcess] Task test_celery.add[168c7d96-e41a-41c9-80f5-50b24dcaff73] succeeded in 0.000435483998444s: 19
为什么这不起作用?
只要继续阅读教程。 这将在“ 保持结果”章节中解释。
要启动Celery,您需要提供broker参数,这是发送有关任务的消息所必需的。 如果你想检索完成的任务返回的状态和结果的信息,你需要设置后端参数。 您可以在configuration文档中find包含说明的完整列表:CELERY_RESULT_BACKEND 。
我build议看一下: http : //www.cnblogs.com/fangwenyu/p/3625830.html
在那里你会看到,而不是
app = Celery('tasks', broker='amqp://guest@localhost//')
你应该写作
app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')
就是这个。
万一有人犯了同样的错误,我也是这么做的:教程中没有这么明确地expression,只是行
app = Celery('tasks', backend='rpc://', broker='amqp://')
是你的tasks.py
文件中的一行的编辑。 我现在写道:
app = Celery('tasks', backend='rpc://', broker='amqp://guest@localhost//')
当我从命令行运行python时,我得到:
$ python >>> from tasks import add >>> result = add.delay(4,50) >>> result.ready() >>> False
所有教程应该很容易遵循,即使有点醉了。 到目前为止,这个并没有达到那个标准。
在你的项目目录下find设置文件。
那么:sudo vim settings.py复制/粘贴到settings.py中:CELERY_RESULT_BACKEND ='djcelery.backends.database:DatabaseBackend'
注意:这是如果您使用django-celery作为将消息存储在队列中的后端。