Python 芹菜-完成任务但从不返回结果

Python 芹菜-完成任务但从不返回结果,python,multiprocessing,celery,Python,Multiprocessing,Celery,我刚刚安装了芹菜,正在尝试按照教程进行操作: 我有一个名为tasks.py的文件,其中包含以下代码: from celery import Celery app = Celery('tasks', backend='amqp', broker='amqp://') @app.task def add(x, y): return x + y 我安装了RabitMQ(我没有使用它进行配置,因为教程没有提到任何类似的内容) 我按如下方式运行芹菜工人服务器: celery -A tasks

我刚刚安装了芹菜,正在尝试按照教程进行操作:

我有一个名为tasks.py的文件,其中包含以下代码:

from celery import Celery

app = Celery('tasks', backend='amqp', broker='amqp://')

@app.task
def add(x, y):
    return x + y
我安装了RabitMQ(我没有使用它进行配置,因为教程没有提到任何类似的内容)

我按如下方式运行芹菜工人服务器:

celery -A tasks worker --loglevel=info
它似乎启动正常(以下是输出:)

然后,我运行一个包含以下内容的脚本:

from tasks import add
from time import sleep

result = add.delay(2,2)

while not result.ready():
    sleep(10)
当我检查
result.ready()
时,我总是得到False(因此上面的while循环永远运行)。然而,在芹菜日志上,一切看起来都很好:

[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。关于为什么会这样,有什么见解吗?我在Windows7上,正在使用RabbitMQ。提前感谢。

芹菜需要启用结果后端。看


另请参见。

好的,我已经用fresh Cellery安装了一个clear VM,请设置以下文件:

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 -A tasks worker --loglevel=info
然后我运行runme.py,它给出了预期的结果:

[puciek@somewhere tmp]# python3.3 runme.py
3
很明显,问题在您的设置中,很可能在rabbit mq安装的某个地方,因此我建议使用源代码中的最新稳定版本重新安装它,这就是我正在使用的版本,正如您所看到的,它工作得很好

更新:


事实上,你的问题可能和想象中的一样微不足道——你确定你正在使用同一个版本来运行芹菜,并运行你的消费者吗?我只是设法复制了它,在Python3.3上运行了芹菜,然后在2.7版上运行了runme.py。结果正如您所描述的。

应该可以解决您的问题

ignore_result=False

在代码中的何处运行result.readh()检查?你没有包括那部分。也许还值得尝试result=add.delay(2,2).get(5),看看你是否能得到那样的结果。@Puciek For
result=add.delay(2,2).get(5)
I get
result=add.delay(2,2).get(5)
,所以我猜它没有得到任何回报。如果我尝试
result.readh()
我得到了
AttributeError:“AsyncResult”对象没有属性“readh”
请将代码发布到检查数据是否准备好的地方,因为这是毫无意义的猜测。@Puciek抱歉,我正在使用PyScripter运行代码,然后手动检查result.ready();我将修改代码,使其独立。@Puciek
For result=add.delay(2,2).get(5)
I get
TimeoutError:操作超时。
(在前面的帖子中有一个输入错误)他设置在app=芹菜('tasks',backend='amqp',broker='amqp://')@silviud我在tasks.py
app=芹菜中有以下行('tasks',backend='amqp',broker='amqp://'))
;我认为是启用了后端?结果后端的设置是错误的-证明是执行get时超时-可以重置代理“rabbitmqctl stop_app;rabbitmqctl reset;rabbitmqctl start_app”。您可以像这样ping您的工作者“芹菜检查ping”,还应该看到一个名为ce的交换leryresults在执行“rabbitmqctl列表交换”时-要查看任务是否仍处于活动状态,可以使用“芹菜检查活动”-抱歉,我没有解释better@Puicek感谢您发表的非常有见地的文章;我只安装了python2.7,安装了最新版本的芹菜,并安装了3.4.1版本的rabbitMQ for windows。您的虚拟机设置是什么,我也想尝试一下,看看这对我是否有效?还尝试重新安装它(没有改进)。如果你的虚拟机是linux,我想这可能是windows特有的issue@kyphos它确实是一个linux(具体来说是gentoo,但我不推荐新手使用),试试看,让我知道它是如何运行的。