【问题标题】:python 2.7 xml.etree.cElementTree memory usepython 2.7 xml.etree.cElementTree 内存使用
【发布时间】:2016-01-24 02:08:20
【问题描述】:

我为我的工作创建了一个小工具,它解析 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."

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

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

【问题讨论】:

    标签: xml python-2.7 memory celementtree


    【解决方案1】:

    不,据我所知,您不必担心。鉴于引用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" 是否打印到您的控制台。

    【讨论】:

    • 它似乎工作,你的回答是有道理的:一旦变量超出范围,它就会从内存中删除。非常感谢这个技巧,它将来可能会派上用场;-)
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2015-09-01
    相关资源
    最近更新 更多