2010-01-24 65 views
1

甚至不知道如果模塊級是正確的在這裏,但...主塔:免費的模塊級變量?

我有一個主塔項目和模型組件中我有一個全局變量,DOC,在__init__.py,我想從不同的查詢對象使用。 (doc是我用作假數據庫的XML文件的文檔句柄。)我的問題是,__init__.py的作用域何時結束?目前我沒有用doc.unlink()來釋放文檔,我不知道該把它放在哪裏。

我在考慮使消耗對象(Query)具有此文檔的類級變量(即使其成爲單例)的替代設計。但看起來,我的查詢對象的生活是這樣的,文檔總是重新分配一個新的文檔句柄。

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

對象只有在1)沒有對它們的引用時纔會停止存在,或者2)解釋器結束。模塊/軟件包在其私有字典中引用所有模塊級名稱;刪除所有其他模塊以及sys.modules,中對該模塊的所有引用,其中的任何對象的所有引用都將釋放該模塊。

0

您是否考慮將doc對象放入globals?由於它是一個不可改變的對象,它將成爲存儲它的理想場所。比你可以從任何控制器(期間__init__或顯式調用對象的方法時)

引用globals並把它傳遞到Query對象你也可以嘗試存儲在控制器的sessionDOC對象(如果每會話讀取要求)