Как лучше всего интегрировать синтаксический анализатор XML, написанный на C, в мою существующую программу на Python?

#python #c #python-2.7 #xml-parsing #cpython

Вопрос:

У меня есть существующая программа синтаксического анализа/генератора, написанная на Python2.7, которую я использую для анализа больших XML-файлов. Он использует lxml для выполнения логики синтаксического анализа и регулярных выражений для идентификации xml-тегов и выполняет очень строгую логику связывания, чтобы затем создавать экземпляры классов на основе типов тегов. Весь файл не анализируется, только большая его часть. По сути, это большой файл, который описывает элементы данных, описывая их типы данных и их начальные значения, а также то, как они должны быть подключены через порты, через которые они будут отправлены (с помощью ссылок, почти как пути к файлам) на нашем оборудовании после компиляции в файлы компонентов. Программа использует проанализированные данные, чтобы затем сгенерировать код на языке Си на компоненты. Я не могу вдаваться в подробности по причинам NDA и т. Д.

В любом случае, все это сделано на python и >невероятно> Мы говорим о днях здесь. Кодовая база устарела и была оптимизирована на протяжении многих лет, но я считаю, что с этим просто ничего не поделаешь. Я думаю, что использование такого решения, как интеграция некоторого освещения-быстрое (сравнительно) Код C в нашу программу на Python для выполнения синтаксического анализа, а затем с использованием некоторой логики компоновщика для его обработки или, возможно, даже для создания кода Python на C и его повторной интеграции во время выполнения, а затем продолжить, как обычно,-это путь.

Однако здесь я нахожусь на распутье и не знаю, как действовать дальше. Я видел такие вещи, как упомянутый CPython, но у меня просто нет ресурсов, чтобы идти по длинному пути в неправильном направлении, и я был бы очень признателен за некоторые рекомендации здесь о том, как я могу «переключиться» в середине выполнения моей программы на Python, чтобы выполнить некоторую логику C, а затем вернуться к моему поколению Python. Как бы я это ни делал, это должно быть выполнимо с помощью одной команды, как и раньше, и у меня уже есть побочный проект, написанный на C, который использует библиотеку TinyXML2 для анализа тех же XML-файлов (которые необходимо доработать), которые я могу использовать в качестве начальной позиции, но я готов повторить это, если это необходимо/целесообразно.

Комментарии:

1. Первое, что вам нужно сделать, это профилировать существующий код python , чтобы вы знали, где находятся реальные узкие места в производительности. Кажется маловероятным, что синтаксический анализ xml как таковой будет основным узким местом, учитывая, что lxml-это оболочка вокруг libxml2 (которая написана на C).