避免模​​块全局变量被清除的最佳模式

时间:2017-09-10 23:42:16

标签: python reference-counting

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

# mymodule
pool = MyPoolObject()

如果从某些代码访问:

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

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

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

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

......但即便如此,也不能保证它不会被卸载。

0 个答案:

没有答案