我想在 OS X (10.8.2) 上使用 lxml (3.2.0) 用 Python (2.7.2) 解析一个 1.6 GB XML 文件。因为我已经阅读了有关内存消耗的潜在问题,所以我已经在其中使用了 fast_iter,但是在主循环之后,它会占用大约 8 GB 的 RAM,即使它没有保留来自实际 XML 文件的任何数据。
from lxml import etree
def fast_iter(context, func, *args, **kwargs):
# http://www.ibm.com/developerworks/xml/library/x-hiperfparse/
# Author: Liza Daly
for event, elem in context:
func(elem, *args, **kwargs)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
pass
context = etree.iterparse("sachsen-latest.osm", tag="node", events=("end", ))
fast_iter(context, process_element)
我不明白,为什么会有如此大规模的泄漏,因为元素和整个上下文正在被删除,fast_iter()
而目前我什至不处理 XML 数据。
有任何想法吗?