我发现一些定义了全局对象的模块在以后导入时会被重新创建:
# 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
。。。但即使这样也不能保证它不会被卸载
目前没有回答
相关问题 更多 >
编程相关推荐