python 2.7 xml.etree.cElementTree 内存使用

python 2.7 xml.etree.cElementTree memory use

我为我的工作创建了一个小工具,它解析 xml 个文件以查找元素的文本;示例代码:

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."

这是图形用户界面的一部分;我们从不关闭该应用程序,它始终 运行 在专用计算机上。

如果我没理解错的话,python 在内存中创建了一个代表 xml 树的对象。我的问题是:打印完信息后是否需要清除该对象的内存?我担心我们每次解析 xml 文件时都会使用越来越多的内存...

不,据我所知,您不必为此担心。假设引用 cElementTree 实例的唯一变量是变量 tree,那么该实例将在 tree 超出范围后很快被删除。为了进行实验,您可以定义一个 class ,它会在删除时打印一些内容,以便您知道删除发生的时间,就像发布的 here :

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

然后使用在与 tree 变量相同范围内声明的变量引用 class 的实例:

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

这样您就可以通过删除 c 引用的实例来预测删除 tree 引用的实例,因为它们是在同一范围内声明的。现在观察并查看 "delete object" 是否打印到您的控制台。