【发布时间】:2011-12-03 14:32:09
【问题描述】:
我的 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 内存不足,这没有多大意义。我实际存储的唯一内容是计数,一个整数。为什么会这样:
看到最后内存和 CPU 使用率突然下降了吗?那就是 Python 的崩溃。至少它给了我一个MemoryError(取决于我在循环中做了什么,它给了我更多的随机错误,比如IndexError)和一个堆栈跟踪而不是一个段错误。但是为什么会崩溃呢?
【问题讨论】:
-
stackoverflow.com/questions/1513592/… 建议在完成每个元素后调用
.clear()以节省内存。大概这是可行的,因为 cElementTree 将先前返回的值保留在内存中。 -
@Wooble 您应该将其发布为答案。搞定了。
-
另外,我在
lxml上取得了很好的成功;它具有相同的 (AFAIK) 功能,但内存和时间效率更高。 -
@Oliver
lxml在解析方面胜过ElementTree,但不是cElementTree。 -
请注意:这个问题似乎根本不会影响我的 Mac 上的内存,但会导致我的 Ubuntu 服务器大量消耗 RAM,就像它已经过时一样。
标签: python memory-management memory-leaks elementtree