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

Python 如何从另一个流程中的任务获取任务信息/结果?,python,celery,Python,Celery,我有这个任务。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 app = Celery('tasks', backend='r

我有这个
任务。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
app = Celery('tasks', backend='redis://', broker='redis://localhost')
并使用此代码启动任务:

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
。如何查询芹菜以从另一个进程返回有效的
AsyncResult

我在
tasks.py
中稍微修改了一下后端(将其更改为
redis://
,它工作了):

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
app = Celery('tasks', backend='redis://', broker='redis://localhost')
进一步查看我发现的文档:

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


tasks.py
中,我稍微修改了一下后端(将其更改为
redis://
,它工作了):

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
app = Celery('tasks', backend='redis://', broker='redis://localhost')
进一步查看我发现的文档:

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