可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to retreive the result of a task which has completed. This works
from proj.tasks import add res = add.delay(3,4) res.get() 7 res.status 'SUCCESS' res.id '0d4b36e3-a503-45e4-9125-cfec0a7dca30'
But I want to run this from another application. So I rerun python shell and try:
from proj.tasks import add res = add.AsyncResult('0d4b36e3-a503-45e4-9125-cfec0a7dca30') res.status 'PENDING' res.get() # Error
How can I retrieve the result?
回答1:
It works using AsyncResult
. (see this answer)
So first create the task:
from cel.tasks import add res = add.delay(3,4) res.status 'SUCCESS' res.id '432890aa-4f02-437d-aaca-1999b70efe8d'
Then start another 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
回答2:
This is due to RabbitMQ not actually storing the results. If you need the ability to get the results later on, use redis or SQL as the result backend.