2015-06-10 3 views
4

Я пытаюсь получить результат выполнения задачи. Это работаетПолучить результат задачи по идентификатору в сельдерей

from proj.tasks import add 
res = add.delay(3,4) 
res.get() 
7 
res.status 
'SUCCESS' 
res.id 
'0d4b36e3-a503-45e4-9125-cfec0a7dca30' 

Но я хочу, чтобы запустить это из другого приложения. Поэтому я перезапустил оболочку python и попробовал:

from proj.tasks import add 
res = add.AsyncResult('0d4b36e3-a503-45e4-9125-cfec0a7dca30') 
res.status 
'PENDING' 
res.get() # Error 

Как получить результат?

+0

Что вы используете в качестве брокера/бэкэндом? – tuomur

+0

Я использую стандартную конфигурацию учебников. Брокер/бэкэнд - RabbitMQ – Demetris

ответ

9

Работает с использованием AsyncResult. (См это answer)

Так сначала создать задачу:

from cel.tasks import add 
res = add.delay(3,4) 
res.status 
'SUCCESS' 
res.id 
'432890aa-4f02-437d-aaca-1999b70efe8d' 

Затем начать другую оболочку Python:

from celery.result import AsyncResult 
from cel.tasks import app 
res = AsyncResult('432890aa-4f02-437d-aaca-1999b70efe8d',app=app) 
res.state 
'SUCCESS' 
res.get() 
7 
+0

Просто добавив ссылку: http://stackoverflow.com/questions/5544611/retrieve-a-task-result-object-given-a-task-id-in-celery – ItayB

+0

Мне нравится этот ответ лучше, чем в ссылка ItayB. Спасибо за добавление ссылки. – zerocog

+0

Я просто играл с примером и заметил, что мое состояние изменилось с «УСПЕХА» на «ОЖИДАНИЕ» после того, как задача очистила очередь. Ссылка на http://docs.celeryproject.org/en/latest/userguide/tasks.html#std:state-PENDING, чтобы реализовать свою задачу, возможно, завершилась, и теперь задача task_id истек, уступив неизвестное состояние. – zerocog

0

Это связано с RabbitMQ not actually storing the results. Если вам нужна возможность получить результаты позже, используйте redis или SQL в качестве результата.

+0

Благодарим вас за ссылку. То, что вы говорите, похоже, так, мне удалось это сделать (см. Мой ответ). Это заставляет меня думать, хотя из-за того, что в документации говорится (что вы связали), это не должно работать. – Demetris

Смежные вопросы