此处不确定模块级别是否正确,但是......
我有一个Pylons项目,在模型组件中,我在__init__.py
中有一个全局变量doc,我想从不同的Query对象中使用它。 (doc是我用作假数据库的XML文件的Document句柄。)我的问题是,__init__.py
的范围何时结束?目前我没有使用doc.unlink()释放文档,我不知道该把它放在哪里。
我正在考虑的替代设计使得使用对象(Query)具有该doc的类级变量(即使其成为单例)。但似乎我的Query对象的生命周期总是会重新分配一个新的Document句柄。
class Query(object):
doc = None
def __init__(self, content=None):
self.content = content
if self.doc == None:
self.doc = parse(os.path.join(config['app_conf']['xmldb'], "sample_search_result.xml"))
我可以说,因为文档中元素的地址不断变化。
有人想帮助noobie吗?
答案 0 :(得分:0)
对象仅在1)不存在对它们的引用或2)解释器结束时停止存在。模块/包保持对其私有字典中所有模块级名称的引用;删除所有其他模块以及sys.modules,和中对模块的所有引用,对其中任何对象的所有引用都将释放该模块。
答案 1 :(得分:0)
您是否考虑过将 doc 对象放入globals
?由于它是一个不可变的对象,它应该是存储它的最佳位置。您可以从任何控制器引用globals
并将其传递给Query
对象(在__init__
期间或在对象上调用方法时显式传递)
您还可以尝试将 doc 对象存储在控制器的session
中(如果每个会话需要读取)