簡體   English   中英

芹菜 - 完成任務但永遠不會返回結果

[英]Celery - Completes task but never returns result

我剛剛安裝了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 worker --loglevel=info

它似乎正常啟動(這是輸出: http//i.imgur.com/qnoNCzJ.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()仍然是假的。 任何有關為什么會這樣的見解? 我在Windows 7上,正在使用RabbitMQ。 提前致謝。

應該解決你的問題

ignore_result=False

好的,我已經設置了一個帶有新芹菜安裝的清除虛擬機,設置以下文件:

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。 結果就像你所描述的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM