避免清理模块全局的最佳模式

2024-06-26 06:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现一些定义了全局对象的模块在以后导入时会被重新创建:

# mymodule
pool = MyPoolObject()

如果从某些代码访问:

def f():
   from mymodule import pool
   print id(pool)

后续调用f打印不同的ID!这是令人惊讶的。我希望当f退出时,它是对mymodule的最后一个引用,全局被卸载。我无法在f的调用者中找到对mymodule的引用,因为它最终是一个RPC服务,不知道它将调用什么模块(它接收pickle对象并调用它们)

有没有一个好的方法来避免这种行为并防止globals被卸载?一种快速解决方法是在sys中添加引用:

# mymodule
import sys
sys._mymodule_pool = MyPoolObject()
pool = sys._mymodule_pool

。。。但即使这样也不能保证它不会被卸载


Tags: 模块对象方法代码fromimport定义def