Невозможно выбрать объекты lxml.etree._Element - PullRequest
1 голос
/ 09 июля 2019

Я пытался написать алгоритм, который запускает diff двух файлов XML следующим образом:

  1. Принимает 2 XML-файла и анализирует их как деревья , используя lxml
  2. Преобразовать каждый элемент XML в узел
  3. Найдите, какие узлы не изменены, перемещены, изменены, добавлены / удалены и пометите их как таковые
  4. Распечатайте результаты (что я еще не сделал)

Я основываю свой алгоритм на этом коде Github и в основном переписываю его код моими собственными словами, чтобы понять его.

Мой алгоритм работает отлично, но он душит большие файлы (20 МБ +) и занимает 40 минут (тогда как для файла 17 МБ это 2 минуты, что, к сожалению, достаточно).

Мой алгоритм работал бы намного быстрее, если бы я мог просто использовать больше ЦП (мой код использует все 12,5% в процессоре). Я рассмотрел многопроцессорность, но столкнулся с проблемой, когда "lxml нельзя перехватить (как сейчас), поэтому он не может быть передан между процессами с помощью многопроцессорного пакета" . Я прочитал о том, что такое травление, но изо всех сил пытаюсь найти решение.

Существуют ли обходные пути, которые помогут решить мою проблему? Любые предложения будут с благодарностью! :)

...