簡體   English   中英

為什么Jython與獨立的Python腳本相比需要更多的執行時間

[英]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.

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