在 Jython 中调用 xml.sax.make_parser() 非常慢 - 如何加快速度?
Calling xml.sax.make_parser() is incredibly slow in Jython - how do I speed it up?
我在 Java 应用程序中使用 jython-standalone-2.7.2.jar
并执行需要解析小 [=27=] 文件的简单脚本。出于某种原因,make_parser()
到 return 解析器对象几乎需要两秒钟。
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 ---
在 Jython 脚本中没有 "writing Java pseudo-code" 的情况下,是否有任何方法可以加快每个脚本 运行 的速度?
我不确定是什么占用了这么多时间 - 也许是正在执行查找?由于 make_parser()
需要一个解析器列表,为了避免查找(在 Jython 的上下文中),该列表中应该提供什么?
确实初始化解析器很慢。 Jython 在底层使用 Java Sax。创建 Java 的 Sax 实现的所有 Python 对象需要时间。
如果您有一个纯 Python 解析器,您可以将其插入 make_parser 列表。所以你可能会减少较长的启动时间,但实际解析会更慢。 - 但是我不知道 XML 解析器的纯 Python 实现。 CPython 的默认值 (xml.sax.expatreader
) 使用 C 模块。
好的方面:创建解析器后,解析执行或创建辅助解析器应该会非常快。
因此,如果您需要解析各种小 XML 文件(正如您在评论中指出的那样),您可以在 Java 应用程序和此实例创建一个 make_parser
Python 对象。这是一个骨架:(这是Java代码)
PythonInterpreter pi = new PythonInterpreter();
pi.exec("from xml.sax import make_parser\n" +
"parser = make_parser()");
随后的脚本都可以使用 parser
只要您通过相同的 PythonInterpreter
实例执行它们,如下所示:(Java again)
pi.execfile("your-jython-script.py");
your-jython-script.py 可能包含如下内容:(This is Python)
with open('your-first-xml.xml`) as f:
xml = parser(f)
.
.
.
请注意,Python 脚本不需要 XML 导入,因为它使用预先创建的 Python 对象 parser
.
我在 Java 应用程序中使用 jython-standalone-2.7.2.jar
并执行需要解析小 [=27=] 文件的简单脚本。出于某种原因,make_parser()
到 return 解析器对象几乎需要两秒钟。
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 ---
在 Jython 脚本中没有 "writing Java pseudo-code" 的情况下,是否有任何方法可以加快每个脚本 运行 的速度?
我不确定是什么占用了这么多时间 - 也许是正在执行查找?由于 make_parser()
需要一个解析器列表,为了避免查找(在 Jython 的上下文中),该列表中应该提供什么?
确实初始化解析器很慢。 Jython 在底层使用 Java Sax。创建 Java 的 Sax 实现的所有 Python 对象需要时间。
如果您有一个纯 Python 解析器,您可以将其插入 make_parser 列表。所以你可能会减少较长的启动时间,但实际解析会更慢。 - 但是我不知道 XML 解析器的纯 Python 实现。 CPython 的默认值 (xml.sax.expatreader
) 使用 C 模块。
好的方面:创建解析器后,解析执行或创建辅助解析器应该会非常快。
因此,如果您需要解析各种小 XML 文件(正如您在评论中指出的那样),您可以在 Java 应用程序和此实例创建一个 make_parser
Python 对象。这是一个骨架:(这是Java代码)
PythonInterpreter pi = new PythonInterpreter();
pi.exec("from xml.sax import make_parser\n" +
"parser = make_parser()");
随后的脚本都可以使用 parser
只要您通过相同的 PythonInterpreter
实例执行它们,如下所示:(Java again)
pi.execfile("your-jython-script.py");
your-jython-script.py 可能包含如下内容:(This is Python)
with open('your-first-xml.xml`) as f:
xml = parser(f)
.
.
.
请注意,Python 脚本不需要 XML 导入,因为它使用预先创建的 Python 对象 parser
.