当我了解如何使用芹菜时,我发现了以下内容
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
app = Celery('projectname')
在上面的代码中,我们将 env 变量设置为 DJANGO_SETTINGS_MODULE
这与我们在 manage.py 中所做的相同
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
既然DJANGO_SETTINGS_MODULE
它被设置在 manage.py 为什么要再次设置在芹菜中
我检查了DJANGO_SETTINGS_MODULE已经设置好了。我注释掉并打印了 env 变量:
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
#os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
print("DJANGO_SETTINGS_MODULE [celery.py] : ",os.environ.get("DJANGO_SETTINGS_MODULE"))
app = Celery('projectname')
然后
$ python manage.py runserver
输出:
DJANGO_SETTINGS_MODULE [celery.py] : projectname.settings
所以我觉得它不需要。
这样,芹菜就可以自动发现应用模块中的任务。芹菜不是从manage.py
开始的,它的开始类似于下面
$ celery -A proj worker -l info
当此命令在 shell 中运行时,Celery 会执行proj/celery.py
中的代码,该代码导出 Django 设置并在项目应用程序中查找tasks.py
。
我们将DJANGO_SETTINGS_MODULE环境变量的默认值设置为设置文件的 python 路径。Django 使用这个环境变量来定义它应该加载哪个设置文件,它将允许我们使用 django.conf 导入设置导入设置,我们希望在相应的文件中使用。
在 Django 应用程序中的 celery.py 中再次定义它的目的是因为芹菜作为单独的服务运行,而我们的 django 服务器单独运行。
希望这有助于并澄清您的疑问!!