如何从另一个进程中的任务获取任务信息/结果?

时间:2018-06-06 10:01:35

标签: python celery

我有tasks.py

from celery import Celery
import time

app = Celery('tasks', backend='rpc://', broker='amqp://localhost')

@app.task
def add(x, y):
    print "Waiting for some time!"
    time.sleep(5)

    return x+y + 10

并使用此代码触发任务:

from tasks import add
import time
from celery.result import AsyncResult

r =  add.delay(4, 4)
id = r.task_id

print "started task: "+id

newresult = AsyncResult(id)

print "ready? "+str(newresult.ready())

一切正常。该任务被发送给芹菜工人,并立即返回

[bf@localhost CeleryTest]$ python celerytest.py 
started task: e73ad2ab-3ab6-457a-9185-199c4073f99d
ready? False

现在,我想从另一个Python脚本请求该任务的状态,所以我这样做:

>>> from celery.result import AsyncResult
>>> from tasks import add
>>> newresult = AsyncResult('e73ad2ab-3ab6-457a-9185-199c4073f99d')
>>> newresult.ready()
False

不知何故,此newresult从未准备好,其结果为None。如何查询Celery从其他进程返回有效的AsyncResult

1 个答案:

答案 0 :(得分:1)

我在redis://中用后端(将其更改为tasks.py并且有效)摆弄了一点:

app = Celery('tasks', backend='redis://', broker='redis://localhost')

进一步了解我发现的文档:

  

RPC结果后端(rpc://)是特殊的,因为它实际上并不是   存储状态,而是将它们作为消息发送。这是个   重要的区别因为它意味着只能检索结果   一次,仅由发起任务的客户。两个不同   进程不能等待相同的结果。