2016-01-24 80 views
1

我爲我的工作創建了一個小工具,它分析xml文件以查找元素的文本;示例代碼:python 2.7 xml.etree.cElementTree內存使用

import xml.etree.cElementTree as Etree 


def open_xml(): 
    """ 
    Retrieves info from the xml file 
    """ 
    try: 
     tree = Etree.parse("xml_file.xml") 
     text_to_find = tree.findtext(
      path=".//ns:some_element", 
      namespaces={"ns": "http://something.com/something"}) 
     print text_to_find 

    except IOError: 
     print "No xml file found." 

這是gui的一部分;我們從不關閉應用程序,它始終運行在專用計算機上。

如果我理解正確,python會在內存中創建一個表示xml樹的對象。我的問題是:在完成打印信息後,是否需要清除該對象的內存?我擔心我們每次解析一個xml文件時使用的內存越來越多......

回答

2

不,你不必擔心這一點,據我所知。由於引用cElementTree實例的唯一變量是變量tree,因此該實例在tree超出範圍後將立即刪除。實驗之後,您可以定義一個class,當它被刪除,將打印的東西,所以你知道什麼時候刪除發生,就像一個貼here

class C: 
    def __del__(self): 
     print "delete object" 

,然後參考使用在聲明一個變量,類的實例同一範圍內tree變量:

def open_xml(): 
    .... 
    try: 
     tree = Etree.parse("xml_file.xml") 
     c = C() 
     .... 

這樣你就可以預測實例通過實例的缺失通過c引用由tree引用刪除,因爲它們是在同一範圍內聲明。現在看&看看"delete object"是否打印到您的控制檯。

+1

它似乎有效,你的回答是有道理的:一旦超出範圍,變量就會從內存中刪除。非常感謝這個技巧,未來它可能會派上用場;-) –