2011-12-10 32 views
1

要麼我不明白如何Celery工作,或它對我來說奇怪。芹菜 - 相同的參數,多個調用

我有以下daemon.py模塊:

從celery.task導入任務

import time 


@task 
def add(x, y): 
    time.sleep(x + y) 
    return "x+y=%s" % (x + y) 

推出celeryd用命令:

$ celeryd -I daemon -l DEBUG  

而在單獨的Python控制檯,我做如下:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from daemon import add 
>>> r = add.delay(100,20) 
>>> r 
<AsyncResult: 016a6eac-333c-4606-9f3c-ea3b38dac0ea> 

現在,我認爲當我重複add.delay(100,20)時,它不會調用另一個add函數,但會返回當前工作的daemon.add的AsyncResult。但是:

>>> r2 = add.delay(100,20) 
>>> r2.ready() 
False 
>>> r.ready() 
True 

因此很明顯,R2是不同調用和大於r不同結果。

我做錯了什麼?或者我不明白應該如何使用芹菜?

的Python 2.7,芹菜2.4.5,芹菜配置:

BROKER_URL = "amqp://guest:[email protected]:5672//" 
CELERY_RESULT_BACKEND = "amqp" 
REDIS_HOST = "localhost" 
+0

爲什麼它會返回之前的異步結果?是什麼讓你覺得呢? – jterrace

+0

http://www.celeryproject.org/tutorials/first-steps-with-celery/讓我覺得,但似乎我誤解了。 那麼,我如何才能得到10分鐘的任務結果,例如我開始在例如。以前的網頁運行? – Mvoicem

回答

1

當你調用一個函數是這樣的:

>>> from daemon import add 
>>> r = add.delay(100,20) 
>>> r 
<AsyncResult: 016a6eac-333c-4606-9f3c-ea3b38dac0ea> 

rAsyncResult對象允許您檢索的結果任務。您可以調用get方法來阻止任務完成並返回結果。如果您想檢查任務是否完成而沒有阻塞,您也可以定期致電ready

如果要檢查任務的結果,你再也不用爲AsyncResult對象的引用,你可以通過它的任務ID查找它,如圖here

>>> from daemon import add 
>>> r = add.AsyncResult('016a6eac-333c-4606-9f3c-ea3b38dac0ea') 
>>> r.get()