Джанго инициализация - PullRequest
10 голосов
/ 13 июля 2009

У меня большой массив, который я хотел бы загрузить в память только один раз, когда запускается django, а затем обрабатывать его как глобальную переменную только для чтения. Как лучше всего поместить код для инициализации этого массива?

Если я добавлю его в settings.py, он будет переинициализироваться каждый раз при импорте модуля настроек, правильно?

Ответы [ 2 ]

17 голосов
/ 13 июля 2009

settings.py для настроек Django; это нормально, чтобы поместить свои собственные настройки там, но использование их для произвольных неконфигурационных структур данных не является хорошей практикой.

Просто поместите его в модуль, которому он логически принадлежит, и он будет запускаться только один раз для каждого экземпляра. Если вы хотите гарантировать, что модуль загружается при запуске, а не при первом использовании в дальнейшем, импортируйте этот модуль из верхнего уровня __init__.py, чтобы принудительно загрузить его немедленно.

9 голосов
/ 13 июля 2009

settings.py это правильное место для этого. Settings.py, как и любой другой модуль, загружается один раз. По-прежнему существует проблема того, что модуль должен быть импортирован один раз для каждого процесса, поэтому веб-сервер в стиле респауна (например, apache) перезагрузит его один раз для каждого рассматриваемого экземпляра. Для mod_python это будет один раз за процесс. для mod_wsgi это, вероятно, будет только один раз, если вам не придется перезапускать.

tl; dr модули импортируются один раз, даже если используются несколько операторов импорта. положить его в settings.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...