Python 芹菜-完成任务但从不返回结果
我刚刚安装了芹菜,正在尝试按照教程进行操作: 我有一个名为tasks.py的文件,其中包含以下代码: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
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 getresult=add.delay(2,2).get(5)
,所以我猜它没有得到任何回报。如果我尝试result.readh()
我得到了AttributeError:“AsyncResult”对象没有属性“readh”
请将代码发布到检查数据是否准备好的地方,因为这是毫无意义的猜测。@Puciek抱歉,我正在使用PyScripter运行代码,然后手动检查result.ready();我将修改代码,使其独立。@PuciekFor result=add.delay(2,2).get(5)
I getTimeoutError:操作超时。
(在前面的帖子中有一个输入错误)他设置在app=芹菜('tasks',backend='amqp',broker='amqp://')@silviud我在tasks.pyapp=芹菜中有以下行('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,但我不推荐新手使用),试试看,让我知道它是如何运行的。