2011-12-10 12 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> 

rはあなたが結果を取得できますAsyncResultオブジェクトであります仕事。 getメソッドを呼び出して、タスクが終了して結果を返すまでブロックすることができます。タスクがブロックされずに完了したかどうかを確認する場合は、定期的にreadyに電話をかけることもできます。

タスクの結果を確認したいんし、あなたは、もはやAsyncResultオブジェクトへの参照を持っている場合はhereを示すように、あなたはそのタスクIDを指定して検索することができます。

>>> from daemon import add 
>>> r = add.AsyncResult('016a6eac-333c-4606-9f3c-ea3b38dac0ea') 
>>> r.get() 
関連する問題