我的版本:Django = = 3.2芹菜= = 5.1.2
我settings.local:CELERY_RESULT_BACKEND ="复述://@127.0.0.1:6379/1">
celery.py:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
# # 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cmdb.settings.local')
# 实例化
# app = Celery('celeryPro', include=['message.tasks'])
app = Celery('celeryPro', backend='redis://127.0.0.1:6379/1')
# app = Celery('cmdb')
# namespace='CELERY'作用是允许你在Django配置文件中对Celery进行配置
# 但所有Celery配置项必须以CELERY开头,防止冲突
app.config_from_object('django.conf:settings', namespace='CELERY')
# app.config_from_object(config, namespace='CELERY')
# 自动从Django的已注册app中发现任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request:{0!r}'.format(self.request))
总是得到错误
您的设置在两个方面不正确。
- 仅在创建芹菜和实例时添加
backend
也调用config_from_object
,根据文档,之前的任何配置都将被重置。 - 传递给
config_from_object
方法的配置文件不正确。您需要发送芹菜应该使用的文件和而不是Django使用的。你可以在配置文档中找到更多信息。
作为一个例子,您可以按照如下方式配置您的celery.py
文件:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
# # 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cmdb.settings.local')
# 实例化
# app = Celery('celeryPro', include=['message.tasks'])
# app = Celery('celeryPro', backend='redis://127.0.0.1:6379/1')
app = Celery('cmdb')
# namespace='CELERY'作用是允许你在Django配置文件中对Celery进行配置
# 但所有Celery配置项必须以CELERY开头,防止冲突
app.config_from_object('celery_config', namespace='CELERY')
# app.config_from_object(config, namespace='CELERY')
# 自动从Django的已注册app中发现任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request:{0!r}'.format(self.request))
和你的celery_config.py
文件可以像下面这样:
broker_url = 'redis://localhost:6379/1'
result_backend = 'redis://localhost:6379/1'
将芹菜的配置放在另一个文件中,当你想扩展配置时,可以获得更大的灵活性。
注意-您应该将celery_config.py
文件保存在项目的根目录中,即与manage.py
文件在相同的位置。