Модули Python: когда кто-то их импортирует, они попадают в память? - PullRequest
8 голосов
/ 10 сентября 2011

Я только что закончил это упражнение для начинающих по созданию и импорту модулей в Python.

Мне было интересно, все ли в модуле импортируется в память компьютера?

Будут ли последствия для памяти позже, когда код станет длиннее, а импортируемые модули станут более многочисленными?

Нужно ли мне знать управление памятью для написания ресурсоэффективного кода из-за этого?

Ответы [ 3 ]

8 голосов
/ 10 сентября 2011

Ваши модули автоматически компилируются (файлы .pyc), которые затем импортируются в память, но вам не нужно бояться выхода из памяти: модули очень маленькие; Обычно одновременно загружаются тысячи модулей!

Вам не нужно знать управление памятью, поскольку Python сделает всю работу за вас.

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

3 голосов
/ 10 сентября 2011

Я могу только вообразить, что импорт может быть использован для утечки памяти;Вы могли бы динамически создавать и импортировать модули произвольного имени (скажем, с целью создания системы плагинов);использовать их один раз и прекратить их использование.Если вы сделали это с помощью обычного механизма импорта, то есть с __import__(variable_module_name), эти модули будут добавлены к sys.modules, и даже если они больше не будут использоваться.

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

Если вам действительно нужно использовать импорт динамически сгенерированного кода (скажем, для автоматического тестирования), то вам, вероятно, нужно покопаться в sys.modules, чтобы стереть импортированные вами модули. Вот хорошая статья, объясняющая, как сделать что-то подобное.

0 голосов
/ 10 сентября 2011

Да и нет.

Да, модули действительно импортируются в память компьютера, но из-за этого вам не следует писать ресурсоэффективный код.Модули Python очень малы (несколько КиБ, в редких случаях - несколько МиБ) и не оказывают существенного влияния на использование памяти.

...