![](/img/trans.png)
[英]SLOW SPEED in using SAX Parser to parse XML data and save it to mysql localhost (JAVA)
[英]Calling xml.sax.make_parser() is incredibly slow in Jython - how do I speed it up?
我在 Java 應用程序中使用jython-standalone-2.7.2.jar
並執行需要解析一個小 Z3501BB093D363810B671059B9CFED3F 文件的簡單腳本。 由於某種原因, make_parser()
需要將近兩秒鍾的時間才能返回一個解析器 object。
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 腳本中“編寫 Java 偽代碼”的情況下加快每個腳本運行的速度?
我不確定是什么占用了這么多時間 - 也許是正在執行查找? 由於make_parser()
需要一個解析器列表,為了避免查找(在 Jython 的上下文中),應該在這個列表中提供什么?
確實初始化解析器很慢。 Jython 在引擎蓋下使用 Java Sax。 創建 Java 的 Sax 實現的所有 Python 對象是需要時間的。
如果你有一個純 Python 解析器,你可以將它插入 make_parser 需要的列表。 因此,您可能會減少較長的啟動時間,但實際解析會更慢。 - 但是我不知道 XML 解析器的純 Python 實現。 CPython 的默認 ( xml.sax.expatreader
) 使用 C 模塊。
好的一面是:一旦創建了解析器,解析執行或創建輔助解析器應該很快。
Therefore, if you need to parse various small XML files (as you indicate in your comment), you could create a global PythonInterpreter
instance in your Java app and in this instance create a make_parser
Python object. 這里有一個骨架:(這是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 導入,因為它使用預先創建的parser
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.