Ail*_*lyn 19 python memory-leaks memory-management 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))
Run Code Online (Sandbox Code Playgroud)
这会导致Python耗尽内存,这并没有多大意义.我实际存储的唯一东西是count,一个整数.为什么这样做:

看到内存和CPU使用率突然下降?这是Python的惊人崩溃.至少它给了我一个MemoryError(取决于我在循环中做了什么,它给了我更多随机错误,比如一个IndexError)和堆栈跟踪而不是段错误.但为什么会崩溃?
Joh*_*hin 12
文档告诉你" 逐步将XML部分解析为元素树 [我的重点]",但没有涵盖如何避免保留不感兴趣的元素(可能是所有元素).这是由覆盖本文由effbot.
我强烈建议所有使用的人.iterparse()都应该阅读Liza Daly撰写的这篇文章.它涵盖了两者lxml和[c] ElementTree.
以前关于SO的报道:
对大型XML文件使用Python Iterparse
Python xml ElementTree可以解析一个非常大的xml文件吗?
在Python中解析大型XML文档的最快方法是什么?
代码示例:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10613 次 |
| 最近记录: |