django芹菜:未配置结果后端

django芹菜:未配置结果后端,django,django-celery,Django,Django Celery,我正在尝试在我的项目中使用django芹菜 在settings.py中,我有 CELERY_RESULT_BACKEND = "amqp" 服务器一开始运行正常 python manage.py celeryd --setting=settings 但是,如果我想访问延迟任务的结果,则会出现以下错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\

我正在尝试在我的项目中使用django芹菜

在settings.py中,我有

CELERY_RESULT_BACKEND = "amqp"
服务器一开始运行正常

python manage.py celeryd --setting=settings
但是,如果我想访问延迟任务的结果,则会出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\celery\result.py", line 108, in ready
    return self.status in self.backend.READY_STATES
  File "C:\Python27\lib\site-packages\celery\result.py", line 196, in status
    return self.state
  File "C:\Python27\lib\site-packages\celery\result.py", line 191, in state
    return self.backend.get_status(self.task_id)
  File "C:\Python27\lib\site-packages\celery\backends\base.py", line 404, in _is
_disabled
    raise NotImplementedError("No result backend configured.  "
NotImplementedError: No result backend configured.  Please see the documentation
 for more information.
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\lib\site packages\celery\result.py”,第108行,处于就绪状态
返回self.backend.READY_状态中的self.status
文件“C:\Python27\lib\site packages\celery\result.py”,第196行,处于状态
返回自我状态
文件“C:\Python27\lib\site packages\celery\result.py”,第191行,处于状态
返回self.backend.get_状态(self.task_id)
文件“C:\Python27\lib\site packages\芹菜\backends\base.py”,第404行,位于
_残废
引发NotImplementedError(“未配置结果后端”)
NotImplementedError:未配置结果后端。请参阅文档
了解更多信息。
这很奇怪,因为当我刚刚运行celeryd(使用相同的芹菜设置)时,它工作得很好。以前有人遇到过这个问题吗


提前感谢!

了解控制台如何设置django环境以获取设置。例如,在PyCharm中,您可以运行django控制台,在该控制台中,一切正常工作。

如果您只是从运行示例,则需要通过manage.py运行控制台:


%python manage.py shell

我在从芹菜任务返回结果时遇到了相同的问题,尽管芹菜任务已经执行(控制台日志)。我发现,我在django settings.py中有相同的设置
cellery\u result\u BACKEND=“redis”
,但我也在tasks.py中实例化了芹菜

芹菜=芹菜('tasks',broker='redis://localhost“)-我想它会覆盖settings.py属性,因此它没有为用于存储结果的芹菜实例配置后端服务器


我删除了它,让django get芹菜get properties from settings.py,示例代码对我很有用。

适用于那些像我一样拼命寻找解决方案的人

将此行放在
settings.py
脚本的末尾:

djcelery.setup_loader()

看起来<强> django芹菜<强>不会考虑没有严格命令的自己的设置。

参见以更好地理解

注意:AMQP后端需要RabbitMQ 1.1.0或更高版本才能 自动使结果过期。如果您运行的是旧版本的 RabbitMQ您应该像这样禁用结果过期:
芹菜任务结果过期=无

尝试将以下行添加到settings.py:


CELERY_TASK_RESULT_EXPIRES=18000#5小时

在我的例子中,问题是我将CELERY_RESULT_后端参数传递给CELERY构造函数:

Celery('proj',
         broker = 'amqp://guest:guest@localhost:5672//',
         CELERY_RESULT_BACKEND='amqp://',
         include=['proj.tasks'])
解决方案是使用backend参数:

Celery('proj',
         broker = 'amqp://guest:guest@localhost:5672//',
         backend='amqp://',
         include=['proj.tasks'])