Python 挂架:自由模块级变量?

Python 挂架:自由模块级变量?,python,object,scope,singleton,pylons,Python,Object,Scope,Singleton,Pylons,甚至不确定这里的模块级别是否正确,但是 我有一个Pylons项目,在模型组件中,我有一个全局变量doc,在\uuuu init\uuuu.py中,我想从不同的查询对象使用它。(doc是一个XML文件上的文档句柄,我用它作为假数据库。)我的问题是,\uuu init\uuuuuuuuupy的作用域何时结束?目前,我没有使用doc.unlink()释放文档,我不确定该放在哪里 我考虑的另一种设计是使消费对象(查询)具有此文档的类级变量(即使其成为单例)。但我的查询对象的生命周期似乎是这样的,文档总是

甚至不确定这里的模块级别是否正确,但是

我有一个Pylons项目,在模型组件中,我有一个全局变量doc,在
\uuuu init\uuuu.py
中,我想从不同的查询对象使用它。(doc是一个XML文件上的文档句柄,我用它作为假数据库。)我的问题是,
\uuu init\uuuuuuuuupy
的作用域何时结束?目前,我没有使用doc.unlink()释放文档,我不确定该放在哪里

我考虑的另一种设计是使消费对象(查询)具有此文档的类级变量(即使其成为单例)。但我的查询对象的生命周期似乎是这样的,文档总是被重新分配一个新的文档句柄

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摆脱困境吗?

只有当1)不存在对对象的引用,或2)解释器结束时,对象才会停止存在。模块/包在其私有dict中保留对所有模块级名称的引用;删除所有其他模块以及sys.modules中对该模块的所有引用,以及对其中任何对象的所有引用将释放该模块。

您是否考虑过将doc对象放入
globals
?因为它是一个不变的物体,所以它应该是储存它的最佳场所。然后,您可以从任何控制器引用
globals
,并将其传递给
查询
对象(在
\uuuuuuu init\uuuuuuu
期间或在对象上调用方法时显式传递)

您还可以尝试将文档对象存储在控制器的
会话
(如果每个会话都需要读取)