【问题标题】:Pylons: free module-level variables?Pylons:免费的模块级变量?
【发布时间】:2010-01-24 22:29:45
【问题描述】:

甚至不确定模块级别是否正确,但是...

我有一个 Pylons 项目,在模型组件中我有一个全局变量 doc,位于 __init__.py 中,我想从不同的 Query 对象中使用它。 (doc 是我用作假数据库的 XML 文件的文档句柄。)我的问题是,__init__.py 的范围何时结束?目前我没有使用 doc.unlink() 释放文档,我不确定该放在哪里。

我正在考虑的替代设计涉及使消费对象(查询)具有此文档的类级变量(即使其成为单例)。但似乎我的 Query 对象的生命周期使得 doc 总是被重新分配一个新的 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"))

我知道,因为 Document 中元素的地址一直在变化。

有人想帮助一个菜鸟吗?

【问题讨论】:

    标签: python object scope singleton pylons


    【解决方案1】:

    对象仅在以下情况停止存在:1)不存在对它们的引用,或 2)解释器结束。模块/包在其私有字典中保留对所有模块级名称的引用;删除所有其他模块以及 sys.modules 中对模块的所有引用,和对其中任何对象的所有引用都会释放该模块。

    【讨论】:

      【解决方案2】:

      您是否考虑过将 doc 对象放入 globals 中?由于它是一个不可变的对象,因此它应该是存储它的理想场所。比您可以从任何控制器引用 globals 并将其传递给 Query 对象(在 __init__ 期间或显式调用对象上的方法时)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        相关资源
        最近更新 更多