Действительно, инициализация парсера идет медленно. Jython использует Java Sax под капотом. На создание всех Python объектов реализации Java Sax нужно время.
Если бы у вас был чистый парсер Python, вы могли бы подключить его к списку, который принимает make_parser. Таким образом, вы можете сократить длительное время запуска, но фактический анализ будет медленнее. - Однако мне неизвестна чистая реализация Python парсера XML. CPython по умолчанию (xml.sax.expatreader
) использует модуль C.
С яркой стороны: После создания синтаксического анализатора выполнение синтаксического анализа или создание вторичного парсер должен быть довольно быстрым.
Поэтому, если вам нужно проанализировать различные небольшие файлы XML (как вы указываете в своем комментарии), вы можете создать глобальный экземпляр PythonInterpreter
в своем приложении Java и в этом случае создайте объект make_parser
Python. Здесь скелет: ( Это Java код )
PythonInterpreter pi = new PythonInterpreter();
pi.exec("from xml.sax import make_parser\n" +
"parser = make_parser()");
Все последующие скрипты могут использовать parser
, если вы выполняете их через один и тот же PythonInterpreter
экземпляр. вот так: (Java снова )
pi.execfile("your-jython-script.py");
your-jython-script.py может содержать что-то вроде этого: ( Это Python)
with open('your-first-xml.xml`) as f:
xml = parser(f)
.
.
.
Обратите внимание, что сценарий Python не требует импорта XML, поскольку он использует предварительно созданный Python объект parser
.