2016-01-24 77 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

它似乎有效,你的回答是有道理的:一旦超出范围,变量就会从内存中删除。非常感谢这个技巧,未来它可能会派上用场;-) –