簡體   English   中英

在 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並執行需要解析一個小 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM