Сельдерей - Не удается получить результаты задачи - PullRequest
0 голосов
/ 27 июня 2018

Я использую Django ORM / Cache в качестве бэкенда для сельдерея. Я вижу, что таблица django_celery_results_taskresult создана в базе данных. После того, как задачи завершены, результаты также вставляются в базу данных, которую можно просмотреть из MySQL. Но когда я пытаюсь получить доступ к результатам, используя AsyncResult и идентификатор задачи из django manage.py shell, я получаю следующую ошибку.

>>> AsyncResult.get('88e4d870-1a2b-4675-8f7c-1eacb7199bda')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/root/vms/lib/python3.6/site-packages/celery/result.py", line 199, in get
    if self.ignored:
AttributeError: 'str' object has no attribute 'ignored'
>>> AsyncResult('88e4d870-1a2b-4675-8f7c-1eacb7199bda').get()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/root/vms/lib/python3.6/site-packages/celery/result.py", line 224, in get
    on_message=on_message,
  File "/root/vms/lib/python3.6/site-packages/celery/backends/base.py", line 470, in wait_for_pending
    no_ack=no_ack,
  File "/root/vms/lib/python3.6/site-packages/celery/backends/base.py", line 773, in _is_disabled
    raise NotImplementedError(E_NO_BACKEND.strip())
NotImplementedError: No result backend is configured.
Please see the documentation for more information.

Мой celery.py файл:

from __future__ import absolute_import, unicode_literals
from celery import Celery
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'vms.settings')

app = Celery('vms', broker='redis://localhost', include=['cve.tasks','cpe.tasks'])

app.conf.update(
    result_backend='django-db',
    timezone = 'Asia/Kolkata'
)

if __name__ == '__main__':
    app.start()

Я включил django_celery_results в settings.py INSTALLED_APPLICATIONS.

Я нахожу странным, что результаты вставляются в базу данных, но не могут быть получены.

1 Ответ

0 голосов
/ 27 июня 2018

Вы должны импортировать свое приложение, чтобы получить доступ к результатам. Попробуйте следующий код в вашей оболочке:

from path.to.celery import app


app.AsyncResult('88e4d870-1a2b-4675-8f7c-1eacb7199bda')
...