Я пытался написать алгоритм, который запускает diff двух файлов XML следующим образом:
- Принимает 2 XML-файла и анализирует их как деревья , используя lxml
- Преобразовать каждый элемент XML в узел
- Найдите, какие узлы не изменены, перемещены, изменены, добавлены / удалены и пометите их как таковые
- Распечатайте результаты (что я еще не сделал)
Я основываю свой алгоритм на этом коде Github и в основном переписываю его код моими собственными словами, чтобы понять его.
Мой алгоритм работает отлично, но он душит большие файлы (20 МБ +) и занимает 40 минут (тогда как для файла 17 МБ это 2 минуты, что, к сожалению, достаточно).
Мой алгоритм работал бы намного быстрее, если бы я мог просто использовать больше ЦП (мой код использует все 12,5% в процессоре). Я рассмотрел многопроцессорность, но столкнулся с проблемой, когда "lxml нельзя перехватить (как сейчас), поэтому он не может быть передан между процессами с помощью многопроцессорного пакета" . Я прочитал о том, что такое травление, но изо всех сил пытаюсь найти решение.
Существуют ли обходные пути, которые помогут решить мою проблему? Любые предложения будут с благодарностью! :)