Django 和芹菜:既然 'celery' 程序已经在 manage.py 中设置了DJANGO_SETTINGS_MODULE,那么为什么需要为



当我了解如何使用芹菜时,我发现了以下内容

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 服务器单独运行。

希望这有助于并澄清您的疑问!!

相关内容

  • 没有找到相关文章

最新更新