带有芹菜的Django无法从后端获得结果

时间:2015-03-14 17:30:19

标签: python django celery django-celery

我的django项目是从Celery repo:https://github.com/celery/celery/tree/3.1/examples/django克隆的。在const BROKER_URL之后的设置中我添加了

CELERY_RESULT_BACKEND = 'amqp://'

我正在尝试从项目中添加'add'的任务。内部工人终端结果还可以,但无法取回。我叫这样的命令:

from demoapp.tasks import add
add.delay(2,2)
add.AsyncResult(a.task_id).get()

但不知道为什么我会收到错误:

<ipython-input-3-5f18de09f6a1> in <module>()
----> 1 add.AsyncResult(a.task_id).get()

/home/t/py/django/celeryexample/venv/lib/python2.7/site-packages/celery/result.pyc in get(self, timeout, propagate, interval, no_ack, follow_parents, EXCEPTION_STATES, PROPAGATE_STATES)
    167             interval=interval,
    168             on_interval=on_interval,
--> 169             no_ack=no_ack,
    170         )
    171         if meta:

/home/t/py/django/celeryexample/venv/lib/python2.7/site-packages/celery/backends/base.pyc in _is_disabled(self, *args, **kwargs)
    595     def _is_disabled(self, *args, **kwargs):
    596         raise NotImplementedError(
--> 597             'No result backend configured.  '
    598             'Please see the documentation for more information.')
    599     wait_for = get_status = get_result = get_traceback = _is_disabled

NotImplementedError: No result backend configured.  Please see the documentation for more information

3 个答案:

答案 0 :(得分:1)

我从ipython运行任务而不是manage.py shell,这就是问题

答案 1 :(得分:0)

您收到此错误是因为您将后端设置为使用AMPQ兼容的后备存储,而您没有。 通常的AMPQ存储是RabbitMQ,但还有其他像ActiveMQ,Apollo等。

我建议不要使用AMPQ进行持久化,除非您有专用服务器。

您可以使用数据库或redis来存储结果。出于测试目的,您可以使用SQLite,

CELERY_RESULT_BACKEND = 'db+sqlite:///results.db'

来自celery docs

答案 2 :(得分:0)

pip install 'django_celery_results'

在settings.py中的INSTALLED_APPS中添加django_celery_results(它将创建一个表来存储结果)

在procject的settings.py中设置芹菜结果如下所示

CELERY_RESULT_BACKEND = 'django-db'

python manage.py makemigrations
python manage.py migrate

重启工人..完成