[英]why Jython takes more execution time compare to standalone Python script
我是剛開始使用Python / Jython的人,剛好4周前開始。Jython腳本的執行時間是獨立的相同python腳本的14倍。根據我的項目要求,我們需要將python / Jython腳本與Java應用程序集成。 根據Jython文檔,我創建了JythonFacory類來調用jython腳本並獲得了腳本結果。 但是當我看到執行時間(59秒)時,這是一個很大的性能問題。 當我在Eclipse中運行相同的獨立python腳本時,速度非常快(大約3秒)。
您能否建議我應該怎樣做才能獲得更好的性能。 由於性能問題,Jython似乎不是我的理想選擇。 是否有其他選擇可以直接從Java調用純Python腳本,而無需使用Jython.jar
public class JythonFactory {
private static JythonFactory instance = null;
public synchronized static JythonFactory getInstance() {
if(instance == null){
instance = new JythonFactory();
}
return instance;
}
public static Object getJythonObject(String interfaceName,Map<String, Object>
requestTable, String pathToJythonModule) {
Object javaInt = null;
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.set("REQUEST_TABLE", requestTable);
interpreter.execfile(pathToJythonModule);
String tempName = pathToJythonModule.substring(pathToJythonModule.lastIndexOf("/")+1);
tempName = tempName.substring(0, tempName.indexOf("."));
//System.out.println(tempName);
String instanceName = tempName.toLowerCase();
String javaClassName = tempName.substring(0,1).toUpperCase() + tempName.substring(1);
String objectDef = "=" + javaClassName + "()";
//System.out.println("instanceName"+instanceName + " objectDef"+objectDef);
interpreter.exec(instanceName + objectDef);
try {
Class JavaInterface = Class.forName(interfaceName);
javaInt = interpreter.get(instanceName).__tojava__(JavaInterface);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return javaInt;
}
}
好吧,我認為這些結果是可以預期的... Jython正在Java之上解釋Python代碼,並且我認為它目前尚未進行優化以使用Java 7(invokeDynamic)上可用的更快的方法調度:請參閱: https: //us.pycon.org/2012/schedule/presentation/446/ (即使如此,目前尚不清楚它會比CPython更快)。
盡管如此,如果您針對Java進行概要分析和調優,仍然有可能在程序上獲得更好的性能(即:可能會優化將這些熱點轉換為Java所需的熱點-在CPython上也是一樣,您可能會將其轉換為C / C ++)。
您可以嘗試在Java內部使用CPython(請參閱: http : //jepp.sourceforge.net/ )或直接調用Python可執行文件...(不確定您的需求想法)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.