使用 cElementTree.iterparse 解析 XML 的 Python 内存不足

标签 python memory-management memory-leaks elementtree

我的 XML 解析函数的简化版本在这里:

import xml.etree.cElementTree as ET

def analyze(xml):
    it = ET.iterparse(file(xml))
    count = 0

    for (ev, el) in it:
        count += 1

    print('count: {0}'.format(count))

这会导致 Python 内存不足,这没有多大意义。我实际存储的唯一内容是计数,一个整数。为什么会这样:

enter image description here

看到最后内存和 CPU 使用率突然下降了吗?那就是 Python 的崩溃。至少它给了我一个 MemoryError(取决于我在循环中还做了什么,它给了我更多随机错误,比如 IndexError)和一个堆栈跟踪而不是段错误。但是为什么会崩溃呢?

最佳答案

代码示例:

import xml.etree.cElementTree as etree

def getelements(filename_or_file, tag):
    context = iter(etree.iterparse(filename_or_file, events=('start', 'end')))
    _, root = next(context) # get root element
    for event, elem in context:
        if event == 'end' and elem.tag == tag:
            yield elem
            root.clear() # preserve memory

关于使用 cElementTree.iterparse 解析 XML 的 Python 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697710/

相关文章:

c++ - 构造函数内部的内存分配?

java - 在 java restful api 中查找内存泄漏

c - 释放未分配的指针

python - 如何测试我是否正确调用了 pickle.dump()?

python - 如果一个是 imshow 图,请在 matplotlib 中垂直对齐两个图?

swift - Swift 的 UnsafeMutablePointer<Float>.allocate(...) 实际上分配内存吗?

iphone - 为什么我这里会出现内存泄漏?

actionscript-3 - 在使用 Actionscript 和 MXML 编写的 Flex 程序中调试内存泄漏的最佳方法是什么?

python - 对无序连续整数进行排序的最小交换

python - 导入错误 : libcublas. so.9.0 : cannot open shared object file: No such file or directory when installing tensor flow on Ubuntu 16. 04.03