django 姜果celery :未配置结果后端

hpcdzsge  于 2023-06-25  发布在  Go
关注(0)|答案(7)|浏览(172)

我正在尝试在我的项目中使用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 设置),它的工作刚刚好。以前有人遇到过这个问题吗?
先谢谢你了!

gcxthw6b

gcxthw6b1#

我在从celery任务中获取结果时遇到了同样的问题,尽管celery任务已经执行(控制台日志)。我发现,我在django www.example.com中有相同的设置CELERY_RESULT_BACKEND = "redis"settings.py,但我也在www.example.com中示例化了celerytasks.py
celery = Celery('tasks', broker='redis://localhost')-我认为它覆盖了settings.py属性,因此它没有为我的celery示例配置用于存储结果的后端服务器。
我删除了这个,让django从www.example.com获取celery 获取属性settings.py,示例代码对我有效。

ecr0jaav

ecr0jaav2#

如果只是运行http://www.celeryproject.org/tutorials/first-steps-with-celery/中的示例,则需要通过www.example.com运行控制台manage.py:
% python manage.py shell

kpbwa7wx

kpbwa7wx3#

对于那些像我一样绝望地寻找解决方案的人来说。
将这一行放在settings.py脚本的末尾:

djcelery.setup_loader()

看起来django-celery在没有严格命令的情况下不会考虑它自己的设置。

slmsl1lt

slmsl1lt4#

在我的例子中,问题是我将CELERY_RESULT_BACKEND参数传递给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'])
7gcisfzg

7gcisfzg5#

一些控制台如何设置django环境以获取设置。例如,在PyCharm中,您可以运行django控制台,其中一切都按预期工作。

fv2wmkja

fv2wmkja6#

请参阅AMQP BACKEND SETTINGS以更好地理解
注意AMQP后端需要RabbitMQ 1.1.0或更高版本才能自动过期结果。如果你运行的是旧版本的RabbitMQ,你应该像这样禁用结果过期:CELERY_TASK_RESULT_EXPIRES = None
请尝试将以下行添加到您的settings.py:
CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours

hzbexzde

hzbexzde7#

对于在2023年遇到此问题的用户。如果您使用Celery 5.0或更高版本,请在设置中设置CELERY_RESULT_BACKEND =“rpc://”。如果您正在初始化celery应用程序,请使用以下代码:

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

相关问题