Celery - 完成任务但不返回结果
我刚刚安装了Celery,并试着跟着教程走:
我有一个叫做tasks.py的文件,里面有以下代码:
from celery import Celery
app = Celery('tasks', backend='amqp', broker='amqp://')
@app.task
def add(x, y):
return x + y
我安装了RabbitMQ(因为教程没有提到,所以我没有进行任何配置)。
我这样启动了celery工作服务器:
celery -A tasks worker --loglevel=info
看起来启动得很正常(这是输出的内容:https://i.stack.imgur.com/cUsap.png)
然后我运行了一个脚本,内容如下:
from tasks import add
from time import sleep
result = add.delay(2,2)
while not result.ready():
sleep(10)
当我检查result.ready()
时,我总是得到False(所以上面的while循环一直在运行)。不过,在Celery的日志中,一切看起来都很好:
[2014-10-30 00:58:46,673: INFO/MainProcess] Received task: tasks.add[2bc4ceba-1319-49ce-962d-1ed0a424a2ce]
[2014-10-30 00:58:46,674: INFO/MainProcess] Task tasks.add[2bc4ceba-1319-49ce-962d-1ed0a424a2ce] succeeded in 0.000999927520752s: 4
所以任务被接收并且成功了。然而,result.ready()
仍然是False。有没有人能告诉我这可能是什么原因?我在使用Windows 7,并且使用RabbitMQ。谢谢大家。
3 个回答
2
好的,我在一个干净的虚拟机上安装了新的celery,并设置了以下文件:
tasks.py:
from celery import Celery
app = Celery('tasks', backend='amqp', broker='amqp://')
@app.task
def add(x, y):
return x + y
还有runme.py:
from tasks import add
import time
result = add.delay(1,2)
while not result.ready():
time.sleep(1)
print(result.get())
然后我用以下命令设置了celery:
celery -A tasks worker --loglevel=info
接着我运行了runme.py,得到了预期的结果:
[puciek@somewhere tmp]# python3.3 runme.py
3
所以很明显,问题出在你的设置上,最有可能是在rabbit-mq的安装上。我建议你重新安装最新的稳定版本,这也是我现在使用的,正如你所看到的,它运行得很好。
更新:
其实,你的问题可能简单得让人想不到——你确定你在运行celery和消费者时使用的是同一个版本吗?我刚刚复现了这个问题,我在Python3.3上运行celery,然后用2.7版本运行runme.py,结果就和你描述的一样。
5
应该能解决你的问题
ignore_result=False