Source

django-celery-about / source / result.rst

Full commit

Taskの結果 : Result

CELERY_RESULT_BACKEND: 結果バックエンドの設定

デフォルトなし!

ただし、django-celeryだとあり

>>> from celery import current_app as C
>>> C.conf['CELERY_IGNORE_RESULT']
False

django-celeryだったらdjango データベース(TaskMeta,TaskSetMeta)

$ python ../manage.py shell
>>> from celery import current_app as C
>>> C.conf['CELERY_RESULT_BACKEND']
'database'

AsyncResult

timeout は指定しよう

>>> from celery.result import AsyncResult
>>> id="2a446e6f-2bd3-4dfb-b2fb-5005a522c059"
>>> r=AsyncResult(id)
>>> r.state
u'SUCCESS'
>>> None==r.get(timeout=0.1)
True

django-celeryでストアがDjangoデータベースなら

>>> from djcelery.models import TaskMeta,TaskSetMeta
>>> tm=TaskMeta.objects.get(task_id='2a446e6f-2bd3-4dfb-b2fb-5005a522c059')
>>> tm.status
u'SUCCESS'
>>> tm.result==None
True

EagerResult

その場で確認:ストアには保存されません

>>> r=note.apply(args=('eager eager eager',))
>>> r.state
'SUCCESS'
>>> r.result == None
True

apply_asyncしてもCELERY_ALWAYS_EAGER = True だとEagerResult

#: settings.py

CELERY_ALWAYS_EAGER = True
>>> from app.tasks import *
>>> r = note.apply_async(args=('eager behind',),)
>>> r.state
'SUCCESS'
>>> r.result==None
True
>>> r
<EagerResult: fe2db876-f475-4e5f-9b69-6c558e7c99e8>
  • なので、TaskMetaに結果は入りません。(入った方がいいような気もする )