3

私は4週間前に始めたばかりのPython/Jythonに非常に慣れていません.jythonスクリプトの実行時間の問題は、スタンドアロンの同じpythonスクリプトと比較して14倍かかります.私のプロジェクト要件に従って、python/JythonスクリプトをJavaアプリケーションと統合する必要があります. Jython doc に従って、jython スクリプトを呼び出す JythonFacory クラスを作成し、スクリプトの結果を取得しました。しかし、大きなパフォーマンスの問題である実行時間 (59 秒) を見たとき。同じスタンドアロンの python スクリプトを eclipse で実行したところ、非常に高速でした (約 3 秒)。

より良いパフォーマンスを得るために何をすべきか教えてください。パフォーマンスの問題のため、Jython は適切なオプションではないようです。Jython.jar を使用せずに Java から純粋な Python スクリプトを直接呼び出す他のオプションはありますか

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;
   }
   }
4

1 に答える 1

1

まあ、それらの結果は期待できると思います... JythonはJavaの上でPythonコードを解釈しています.Java 7(invokeDynamic)で利用可能なより高速なメソッドディスパッチを使用するように現在最適化されているとは思いません:https: //us.pycon.org/2012/schedule/presentation/446/ (それでも、CPython よりも高速かどうかは不明です)。

それでも、Java 用にプロファイリングして調整すると、プログラムのパフォーマンスが向上する可能性があります。 /C++)。

Java 内で CPython を使用することもできます ( http://jepp.sourceforge.net/を参照)。または、Python 実行可能ファイルを直接呼び出すこともできます... (要件については不明です)。

于 2012-07-07T22:34:49.233 に答える