У меня есть общий ресурс с высокой стоимостью инициализации, и поэтому я хочу получить к нему доступ по всей системе (в основном он используется для некоторых инструментов, поэтому должен быть легким). Итак, я создал модуль, управляющий настройкой и доступом к ней. Он выполняет ленивую инициализацию ресурса и сохраняет его в глобальной переменной модуля. Затем я использую функции этого модуля в системе для работы с ресурсом.
- Теперь мне интересно, придется ли (или как часто) повторно инициализировать ресурс?
- Я знаю, что объекты собираются мусором в CPython при (или, лучше, около) нулевом счетчике ссылок, но сохраняются ли они в модуле, считающемся ссылкой, даже если модуль в данный момент не выполняется?
Пример с кодом: здесь у нас есть модуль, где _connect () работает медленно. Я хочу использовать report_safely () в своей системе и в конечном итоге вызывать _connect () как можно реже.
__metrics = None
def _connect():
global __metrics
client = SomeSlowToSetUpClient()
__metrics = SomeMetrics(client)
client.connect()
def report_safely():
if not __metrics:
_connect()
__metrics.execute_lightweight_code()