OS X (10.8.2) で lxml (3.2.0) を使用して、Python (2.7.2) で 1.6 GB の XML ファイルを解析したいと考えています。メモリ消費に関する潜在的な問題については既に読んでいたので、 fast_iterを既に使用していますが、メイン ループの後、実際の XML ファイルからのデータを保持しなくても、約 8 GB の RAM を消費します。
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 データを処理していないため、なぜこのような大規模なリークが発生するのかわかりません。
何か案は?