我正在使用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.
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)
所有教程都应该很容易理解,即使有点醉.到目前为止,这个没有达到那个标准.
小智 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)
本教程令人困惑,因为我们假设应用程序对象的创建是在客户端测试会话中完成的,但事实并非如此。