web-dev-qa-db-fra.com

Récupérer le résultat de la tâche par ID dans le céleri

J'essaie de retrouver le résultat d'une tâche qui s'est terminée. Cela fonctionne

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

Mais je veux l'exécuter à partir d'une autre application. Donc je relance python Shell et j'essaye:

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

Comment récupérer le résultat?

25
Demetris

Cela fonctionne en utilisant AsyncResult. (voir ceci réponse )

Créez d'abord la tâche:

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

Ensuite, lancez un autre python Shell:

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
38
Demetris

Cela est dû à RabbitMQ ne stocke pas réellement les résultats . Si vous avez besoin de pouvoir obtenir les résultats ultérieurement, utilisez redis ou SQL comme backend de résultat.

1
tuomur