带芹菜的 Django 无法从后端获取结果
Django with celery can't get result from backend
我的 django 项目是从 Celery 存储库克隆的: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
您收到此错误是因为您将后端设置为使用 AMPQ 兼容的后备存储,而您没有。
通常的 AMPQ 存储是 RabbitMQ,但还有其他的,如 ActiveMQ、Apollo 等
我建议不要使用 AMPQ 进行持久化,除非您有专用服务器。
您可以改用数据库或 Redis 来存储结果。出于测试目的,您可以使用 SQLite,
CELERY_RESULT_BACKEND = 'db+sqlite:///results.db'
我 运行 任务来自 ipython 而不是 manage.py shell 所以这就是问题所在
pip install 'django_celery_results'
在settings.py中的INSTALLED_APPS中添加django_celery_results(它将创建一个table来存储结果)
在您的项目
的settings.py中如下设置芹菜结果
CELERY_RESULT_BACKEND = 'django-db'
python manage.py makemigrations
python manage.py migrate
重启工作器..完成
我的 django 项目是从 Celery 存储库克隆的: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
您收到此错误是因为您将后端设置为使用 AMPQ 兼容的后备存储,而您没有。 通常的 AMPQ 存储是 RabbitMQ,但还有其他的,如 ActiveMQ、Apollo 等
我建议不要使用 AMPQ 进行持久化,除非您有专用服务器。
您可以改用数据库或 Redis 来存储结果。出于测试目的,您可以使用 SQLite,
CELERY_RESULT_BACKEND = 'db+sqlite:///results.db'
我 运行 任务来自 ipython 而不是 manage.py shell 所以这就是问题所在
pip install 'django_celery_results'
在settings.py中的INSTALLED_APPS中添加django_celery_results(它将创建一个table来存储结果)
在您的项目
的settings.py中如下设置芹菜结果CELERY_RESULT_BACKEND = 'django-db'
python manage.py makemigrations
python manage.py migrate
重启工作器..完成