так давайте представим большой XML-документ (размер файла> 100 мб), который мы хотим обработать с помощью cElementTree.iterparse.разделение и захват etree.iterparse с использованием многопроцессорности
но все те ядра, которые обещали нам Intel, были бы полезными, как их использовать? вот что я хочу:
from itertools import islice
from xml.etree import ElementTree as etree
tree_iter = etree.iterparse(open("large_file.xml", encoding="utf-8"))
first = islice(tree_iter, 0, 10000)
second = islice(tree_iter, 10000)
parse_first()
parse_second()
Там, кажется, несколько проблем с этим, не в последнюю очередь в том, что итератор, возвращаемый iterparse(), кажется, сопротивляться нарезку.
Есть ли способ разделить разбор нагрузки большого XML-документ в двух или четыре отдельных задач (без загрузки всего документа в память? Цель бытия, то для выполнения задач на отдельных процессорах.
так что я предполагаю, что я вызываю work.add_task с функцией, которая анализирует каждый отдельный элемент? для elem в etree.parseiter(): workers.add_task (parseElem, elem)? проблема в том, что, поскольку синтаксический анализ является относительно простым, это не приводит к увеличению производительности. мне нужно разделить etree.parseiter() на управляемые куски: в идеале из 100 000 элементов на итерации дайте 25.000 каждому потоку в пуле. это возможно? –
Это зависит от того, что вы делаете, но я думаю. – orlp