芹菜与RabbitMQ:AttributeError:'DisabledBackend'对象没有属性'_get_task_meta_for'

Cas*_*ash 60 python celery

我正在使用Celery Tutorial运行第一步.

我们定义以下任务:

from celery import Celery

app = Celery('tasks', broker='amqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

然后叫它:

>>> from tasks import add
>>> add.delay(4, 4)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for'
Run Code Online (Sandbox Code Playgroud)

我正在运行芹菜工作者和兔子mq服务器.相当奇怪的是,芹菜工作者将任务报告为成功:

[2014-04-22 19:12:03,608: INFO/MainProcess] Task test_celery.add[168c7d96-e41a-41c9-80f5-50b24dcaff73] succeeded in 0.000435483998444s: 19 
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

dan*_*ula 47

继续阅读教程.它将在Keep Results章节中解释.

要启动Celery,您需要提供just broker参数,这是发送有关任务的消息所必需的.如果要检索有关已完成任务返回的状态和结果的信息,则需要设置后端参数.您可以在配置文档中找到包含说明的完整列表:CELERY_RESULT_BACKEND.

  • 我没有遇到任何麻烦,但是仍然遇到了这个错误并且很难纠正它.我在一个Ubuntu终端窗口中运行Celery,在一秒钟内运行Python解释器.在第一个窗口中,我添加了backend ='rpc://'并重新启动了Celery.但是Python在第二个窗口中并没有意识到这种变化.按下Ctrl + d后杀死Python,再次启动Python,它运行正常. (13认同)

Tor*_*Lev 36

我建议看看:http: //www.cnblogs.com/fangwenyu/p/3625830.html

那里你会看到而不是

app = Celery('tasks', broker='amqp://guest@localhost//')
Run Code Online (Sandbox Code Playgroud)

你应该写作

app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')
Run Code Online (Sandbox Code Playgroud)

就是这个.


Die*_*rik 21

万一有人像我一样容易犯错误:教程没有明确说明,但行

app = Celery('tasks', backend='rpc://', broker='amqp://')
Run Code Online (Sandbox Code Playgroud)

是您tasks.py文件中该行的编辑.我现在读到:

app = Celery('tasks', backend='rpc://', broker='amqp://guest@localhost//')
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行python时,我得到:

$ python
>>> from tasks import add
>>> result = add.delay(4,50)
>>> result.ready()
>>> False
Run Code Online (Sandbox Code Playgroud)

所有教程都应该很容易理解,即使有点醉.到目前为止,这个没有达到那个标准.

  • 好了,当您阅读本教程时,请记住,在编辑task.py之后,还必须从任务模块中重新导入add函数!基本上,尽管在add()中分配了正确的后端,但我一直收到此错误,直到我在控制台中退出Python(>>> quit()),回到它($ python)并从任务import add中重新键入。 (2认同)

小智 7

本教程不清楚的是,需要编辑tasks.py模块,以便更改行:

app = Celery('tasks', broker='pyamqp://guest@localhost//')
Run Code Online (Sandbox Code Playgroud)

包含 RPC 结果后端:

app = Celery('tasks', backend='rpc://', broker='pyamqp://')
Run Code Online (Sandbox Code Playgroud)

完成后,Ctrl + C芹菜工作进程并重新启动它:

celery -A tasks worker --loglevel=info
Run Code Online (Sandbox Code Playgroud)

本教程令人困惑,因为我们假设应用程序对象的创建是在客户端测试会话中完成的,但事实并非如此。