Django и сельдерей: что нужно для установки DJANGO_SETTINGS_MODULE для программы «сельдерей», поскольку она уже установлена ​​в manage.py - PullRequest
0 голосов
/ 19 сентября 2019

Пока я понимал, как использовать сельдерей, я обнаружил следующее

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

Это то же самое, что мы делаем в управлении.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

output:

DJANGO_SETTINGS_MODULE [celery.py] :  projectname.settings

Так что я чувствую, что это не нужно.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Это так, что сельдерей может автоматически обнаруживать задачи в модулях вашего приложения.Celery не запускается с manage.py, запускается аналогично приведенному ниже

$ celery -A proj worker -l info

Когда эта команда запускается в оболочке, Celery выполняет код в proj/celery.py, который экспортирует настройки Django и ищет tasks.py вприложения вашего проекта.

1 голос
/ 19 сентября 2019

Мы устанавливаем значение по умолчанию для переменной окружения DJANGO_SETTINGS_MODULE, чтобы оно было путем python к нашему файлу настроек.Эта переменная окружения используется Django для определения того, какой файл настроек он должен загрузить, и это позволит нам импортировать настройки из параметров импорта из django.conf, которые мы хотим использовать в соответствующем файле.

Цель определенияэто снова в celery.py внутри приложения Django, потому что запуск сельдерея выполняется как отдельная служба, а наш сервер django работает отдельно.

Надеюсь, это поможет и прояснит ваши сомнения !!!

...