【问题标题】:Django and celery: What is the need for setting DJANGO_SETTINGS_MODULE for the 'celery' program since its already set in manage.pyDjango 和 celery:为 'celery' 程序设置 DJANGO_SETTINGS_MODULE 有什么需要,因为它已经在 manage.py 中设置了
【发布时间】:2019-09-19 10:46:48
【问题描述】:

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

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 是否已设置。我注释掉并打印了 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

所以我觉得不需要。

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

    这样 celery 可以自动发现应用模块中的任务。 Celery 不是以manage.py 开头的,它的开头类似于下面

    $ celery -A proj worker -l info
    

    当此命令在 shell 中运行时,Celery 会执行 proj/celery.py 中的代码,该代码会导出 Django 设置并在您的项目应用程序中查找 tasks.py

    【讨论】:

    • 我不明白。对我来说,这两个代码似乎都是在 manage.py 中执行的。肯定 Celery 是单独启动的,但是我们在哪里将这个 DJANGO_SETTINGS_MODULE 信息传递给 celery
    • 我用python manage.py runserver检查它,而不是当我用celery -A app -l info检查时,我发现没有设置DJANGO_SETTINGS_MODULE。因为 celery 想要注册任务,使用CELERY_IMPORTS = ( 'app.tasks', )
    【解决方案2】:

    我们将 DJANGO_SETTINGS_MODULE 环境变量的默认值设置为设置文件的 python 路径。 Django 使用这个环境变量来定义它应该加载的设置文件,它将允许我们使用 from django.conf 导入设置来导入我们想要在相应文件中使用的设置。

    在 Django 应用程序中的 celery.py 中再次定义它的目的是因为 celery 作为单独的服务运行,而我们的 django 服务器单独运行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-18
      • 2018-08-02
      • 2018-07-13
      • 2019-05-02
      • 2013-07-01
      • 2012-05-26
      • 2014-09-01
      • 2011-03-20
      相关资源
      最近更新 更多