Модули Python - Что происходит во время выполнения? - PullRequest
2 голосов
/ 06 июля 2019

Я новичок в написании модулей Python, и мне интересно, что происходит с вашим модулем во время выполнения? Например, загружаются и выгружаются модули, когда они нужны? Конкретный случай, с которым я сталкиваюсь, таков:

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

Чтобы быть более широким, какое поведение я могу ожидать от моего модуля во время выполнения моего приложения на Python?

1 Ответ

3 голосов
/ 06 июля 2019

При импорте модуля выполняется его код, и полученный модуль помещается в sys.modules

После этого модуль назначается переменной с именем модуля. Например, если вы делаете import os, модуль вставляется в sys.modules с ключом os и назначается глобальной переменной с именем os.

При нормальной работе модуль никогда не выгружается, поэтому вам не нужно беспокоиться о потере данных или о чем-либо подобном. Тем не менее, существуют такие функции, как importlib.reload, которые могут при определенных обстоятельствах вызывать потерю данных модулем.

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

...