2009-07-13 2 views
3

Мне было интересно - как люди обрабатывают импорт большого количества часто используемых модулей в представлениях django? И каков наилучший способ сделать это эффективно?Эффективный импорт модулей в представления Django

Например, у меня есть некоторые соображения, как,

admin_views.py 
search_views.py 
. 
. 

и от того, что я видел, каждый из них должен использовать HttpResponse или другие такие часто используемые модули. Более того, некоторым из них нужны такие вещи, как BeautifulSoup, а другим нужны другие вещи (md5, auth и др.).

Что я делал при запуске проекта, было сделать include_all.py, который содержал большинство моих общих импортов, а затем добавил эти конкретные вещи в виде сам по себе. Таким образом, у меня было что-то вроде,

admin_views.py

from include_all import * 
... 
[list of specific module imports for admin] 
... 

search_views.py

from include_all import * 
... 
[list of specific module imports for search] 
... 

С течением времени, то include_all стал MISC файл с чем нужности положить в результате - в результате, количество просмотров в конечном итоге импортирует модули, которые им не нужны.

Это повлияет на эффективность? То есть, python (django?) Импортирует все модули один раз и сохраняет/кэширует их, так что любое другое представление, которое им нужно, не нужно импортировать снова? Или мой метод назвать этот длинный файл очень неэффективным - и мне было бы лучше придерживаться индивидуального импорта этих модулей в каждом представлении?

Есть ли какие-либо рекомендации для такого рода вещей?

Спасибо!

ответ

6

сам Python гарантирует, что модуль загружается только один раз (если reload не вызывается явно, что не тот случай): после того, как в первый раз, import этого модуля только связывает его имя непосредственно из sys.modules[themodulename], чрезвычайно быстрая операция , Поэтому Django не нуждается в дальнейшей оптимизации, и вы тоже.

Лучшая практика заключается в том, чтобы избегать from ... import * в производственном коде (что делает его более понятным и более удобным для обслуживания, когда каждое имя приходит, облегчает тестирование и т. Д.) И импортирует модули «по отдельности», как вы выразились, (возможно, сократив количество имен, которые могут сэкономить несколько микросекунд и, безусловно, не будут тратить их на нет, но «явное лучше, чем неявное» - ясность, удобочитаемость, ремонтопригодность - в любом случае является основным соображением).

+0

А это был еще один вопрос, который я задал, - специально используя ... * и импортировать * .. Спасибо! – viksit

+0

@viksit, добро пожаловать! –

0

Я думаю, вы могли бы пощекотать свой часто используемый импорт в ваш файл __init__.py.

0

Django не является CGI (или PHP). Ваше приложение представляет собой один (или несколько) длительный процесс Python. Неважно, сколько времени потребуется для запуска, каждый HTTP-запрос просто вызовет ваши (уже загруженные) функции просмотра.

Смежные вопросы