我正在尝试在我的项目中使用django-celery
在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.
非常奇怪,因为当我刚刚运行celeryd(与相同的celery 设置),它的工作刚刚好。以前有人遇到过这个问题吗?
先谢谢你了!
7条答案
按热度按时间gcxthw6b1#
我在从celery任务中获取结果时遇到了同样的问题,尽管celery任务已经执行(控制台日志)。我发现,我在django www.example.com中有相同的设置
CELERY_RESULT_BACKEND = "redis"
settings.py,但我也在www.example.com中示例化了celerytasks.pycelery = Celery('tasks', broker='redis://localhost')
-我认为它覆盖了settings.py属性,因此它没有为我的celery示例配置用于存储结果的后端服务器。我删除了这个,让django从www.example.com获取celery 获取属性settings.py,示例代码对我有效。
ecr0jaav2#
如果只是运行http://www.celeryproject.org/tutorials/first-steps-with-celery/中的示例,则需要通过www.example.com运行控制台manage.py:
% python manage.py shell
kpbwa7wx3#
对于那些像我一样绝望地寻找解决方案的人来说。
将这一行放在
settings.py
脚本的末尾:看起来django-celery在没有严格命令的情况下不会考虑它自己的设置。
slmsl1lt4#
在我的例子中,问题是我将CELERY_RESULT_BACKEND参数传递给celery构造函数:
解决方案是使用backend参数:
7gcisfzg5#
一些控制台如何设置django环境以获取设置。例如,在PyCharm中,您可以运行django控制台,其中一切都按预期工作。
fv2wmkja6#
请参阅AMQP BACKEND SETTINGS以更好地理解
注意AMQP后端需要RabbitMQ 1.1.0或更高版本才能自动过期结果。如果你运行的是旧版本的RabbitMQ,你应该像这样禁用结果过期:
CELERY_TASK_RESULT_EXPIRES = None
请尝试将以下行添加到您的settings.py:
CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours
hzbexzde7#
对于在2023年遇到此问题的用户。如果您使用Celery 5.0或更高版本,请在设置中设置CELERY_RESULT_BACKEND =“rpc://”。如果您正在初始化celery应用程序,请使用以下代码: