Django 和 celery:为 'celery' 程序设置 DJANGO_SETTINGS_MODULE 需要什么,因为它已经在 manage.py 中设置
Django and celery: What is the need for setting DJANGO_SETTINGS_MODULE for the 'celery' program since its already set in manage.py
当我了解如何使用 celery 时,我发现了以下内容
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')
在上面的代码中我们设置了环境变量DJANGO_SETTINGS_MODULE
这与我们在 manage.py
中所做的相同
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
因为 DJANGO_SETTINGS_MODULE
它被设置在 manage.py 为什么要在 celery 中再次设置它
我检查过 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')
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
所以我觉得不需要。
我们将 DJANGO_SETTINGS_MODULE 环境变量的默认值设置为 python 设置文件的路径。 Django 使用这个环境变量来定义它应该加载哪个设置文件,它允许我们使用我们想要在相应文件中使用的 from django.conf import settings 导入设置。
在 Django 应用程序中 celery.py 再次定义它的目的是因为 celery 运行 作为一个单独的服务,而我们的 django 服务器 运行 是分开的。
希望对您有所帮助,解开您的疑惑!!!
这样 celery 就可以自动发现您的应用程序模块中的任务。 Celery 不是以 manage.py
开始的,它的开始类似于下面的
$ celery -A proj worker -l info
当此命令在 shell 中为 运行 时,Celery 执行 proj/celery.py
中的代码,导出 Django 设置并在项目应用程序中查找 tasks.py
。
当我了解如何使用 celery 时,我发现了以下内容
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')
在上面的代码中我们设置了环境变量DJANGO_SETTINGS_MODULE
这与我们在 manage.py
中所做的相同def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')
因为 DJANGO_SETTINGS_MODULE
它被设置在 manage.py 为什么要在 celery 中再次设置它
我检查过 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')
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
所以我觉得不需要。
我们将 DJANGO_SETTINGS_MODULE 环境变量的默认值设置为 python 设置文件的路径。 Django 使用这个环境变量来定义它应该加载哪个设置文件,它允许我们使用我们想要在相应文件中使用的 from django.conf import settings 导入设置。
在 Django 应用程序中 celery.py 再次定义它的目的是因为 celery 运行 作为一个单独的服务,而我们的 django 服务器 运行 是分开的。
希望对您有所帮助,解开您的疑惑!!!
这样 celery 就可以自动发现您的应用程序模块中的任务。 Celery 不是以 manage.py
开始的,它的开始类似于下面的
$ celery -A proj worker -l info
当此命令在 shell 中为 运行 时,Celery 执行 proj/celery.py
中的代码,导出 Django 设置并在项目应用程序中查找 tasks.py
。