Джанго: импортирует ли представление из модуля медленнее, чем его включение в основной файл views.py? - PullRequest
3 голосов
/ 04 октября 2011

Это может быть больше вопросом о том, как сам Python импортирует методы, но, хотя я понимаю на поверхностном уровне, у меня нет глубокого понимания.

Чрезвычайно упрощенный пример может сделать вещияснее.Из двух приведенных ниже примеров, будет ли заметная разница в скорости выполнения?

Пример 1

# views.py

from app_name.models import *

def add_item(request, name, category):
    item = Item(name=name, category=category)
    item.save()
    return HttpResponseRedirect('/')

Пример 2

# views.py

from app_name.models import *
from app_name.items import add_new_item

def add_item(request, name, category):
    item = add_new_item(request, name, category)
    return HttpResponseRedirect('/')

# items.py

def add_new_item(request, name, category):
    item = Item(name=name, category=category)
    item.save()
    return item

Я должен еще раз добавить, что это чрезвычайно упрощенный пример, и он не отражает реальное реальное реальное решение.Мне просто интересно понять, как работает Python и будет ли пример 2 заметно медленнее, и если да, то при каких обстоятельствах.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 04 октября 2011

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

import sys
print sys.modules
# {'cStringIO': <module 'cStringIO' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cStringIO.so'>, 'copy_reg': <mo........
3 голосов
/ 04 октября 2011

Сам процесс импорта чего-либо «замедляет» работу приложения. Однако мы говорим о времени, которое требуется для чтения файла из файловой системы и его компиляции один раз - миллисекунды. Так что, да, импорт вида вместо просмотра просто медленнее, но практически нет никакой разницы.

2 голосов
/ 05 октября 2011

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

Если вы хотите иметь понятный и понятный код, гораздо важнее позаботиться о структурировании импорта, а импорт с подстановочными знаками, такой как from app_name.models import *, довольно злой, вам следует избегать этого! Смотрите также, например. этот пост !

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