在 Jython 中调用 xml.sax.make_parser() 非常慢 - 如何加快速度?



我在Java应用程序中使用jython-standalone-2.7.2.jar并执行一个简单的脚本,该脚本需要解析一个小的XML文件。出于某种原因,make_parser()返回解析器对象几乎需要两秒钟。

from xml.sax import make_parser
import time
start_time = time.time()
parser = make_parser()
print("--- %s seconds ---" % (time.time() - start_time))

输出:

--- 1.79200005531 seconds ---

有没有办法在不"编写 Java 伪代码"的情况下加快每次脚本运行的速度?

我不确定是什么占用了这么多时间 - 也许是正在执行的查找?由于make_parser()采用解析器列表,因此在此列表中会提供什么以避免查找(在 Jython 的上下文中(?

事实上,初始化解析器很慢。Jython在引擎盖下使用Java Sax。创建Java的Sax实现的所有Python对象需要时间。

如果你有一个纯Python解析器,你可以把它插入make_parser需要的列表。因此,您可能会减少较长的启动时间,但实际解析会更慢。- 但是我不知道XML解析器的纯Python实现。CPython的默认值(xml.sax.expatreader(使用C模块。

好的一面:创建解析器后,解析执行或创建辅助解析器应该非常快。

因此,如果您需要解析各种小 XML 文件(如注释中所述(,您可以在 Java 应用程序中创建一个全局PythonInterpreter实例,并在此实例中创建make_parserPython 对象。这里有一个骨架:(这是Java代码(

PythonInterpreter pi = new PythonInterpreter();
pi.exec("from xml.sax import make_parsern" +
"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

相关内容

  • 没有找到相关文章

最新更新