2011-12-10 71 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()