Почему elementtree.ElementTree.iterparse использует так много памяти?
Я использую elementtree.ElementTree.iterparse для анализа большого (371 МБ) XML-файла.
Мой код в основном это:
outf = open('out.txt', 'w')
context = iterparse('copyright.xml')
context = iter(context)
dummy, root = context.next()
for event, elem in context:
if elem.tag == 'foo':
author = elem.text
elif elem.tag == 'bar':
if elem.text is not None and 'bat' in elem.text.lower():
outf.write(elem.text + '\n')
elem.clear() #line A
root.clear() #line B
У меня вопрос двоякий:
Первый. Нужны ли мне A и B (см. Комментарии к фрагменту кода)? Мне сказали, что root.clear () очищает ненужных потомков, так что память не пожирает, но вот мои наблюдения: использование B и не A - то же самое, что использование ни с точки зрения потребления памяти (построено с помощью диспетчера задач). Использование только A похоже на использование обоих.
Второе. Почему это все еще занимает так много памяти? Когда программа работает, она использует около 100 МБ ОЗУ в конце.
Я предполагаю, что это как-то связано с outf, но почему? Разве это не просто запись на диск? И если он хранит эти данные до закрытия outf, как я могу избежать этого?
Дополнительная информация: Я использую Python 2.7.3 на Windows.