Как получить информацию / результаты задачи из задачи в другом процессе? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть 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 голосов
/ 06 июня 2018

Я немного поковырялся с бэкэндом (изменил его на redis://, и он работал), в tasks.py:

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

Глядя немного дальше в документы, которые я нашел:

Бэкэнд результата RPC (rpc: //) является особенным, поскольку он на самом деле не хранит состояния, а скорее отправляет их в виде сообщений.Это важное различие, поскольку оно означает, что результат может быть получен только один раз, и только клиентом, который инициировал задачу .Два разных процесса не могут ожидать одинакового результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...