我有一个初始化成本很高的共享资源,因此我想在整个系统中访问它(它基本上用于某些仪器,所以必须是轻量级的)。所以我创建了一个模块来管理设置和访问它。它对资源进行延迟初始化并将其存储在模块全局变量中。然后我在整个系统中使用这个模块的功能来操作资源。
- 现在我想知道我是否(或多久)必须重新初始化资源?
- 我知道对象在 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()