Django アプリケーション (python) から Java コードを実行するオプションを検索した結果、Py4J が最適なオプションであることがわかりました。Jython、JPype、および Python サブプロセスを試しましたが、それぞれに特定の制限があります。
- ジソン。私のアプリはpythonで実行されます。
- JPype はバグがあります。JVM は 1 回だけ起動できますが、その後は再起動できません。
- Python サブプロセス。通常のコンソール呼び出しのため、Python と Java の間で Java オブジェクトを渡すことができません。
Py4J Web サイトには次のように書かれています。
パフォーマンスの点では、Py4J はソケットに依存しているため、以前のソリューション (Jython と JPype) の両方よりもオーバーヘッドが大きくなりますが、アプリケーションにとってパフォーマンスが重要な場合、Python プログラムから Java オブジェクトにアクセスすることは最善の方法ではない可能性があります。
機械学習フレームワーク Mahout を使用しているため、アプリケーションのパフォーマンスは非常に重要です。私の質問は、Py4Jゲートウェイサーバーが原因でMahoutの実行も遅くなるか、またはこのオーバーヘッドは、Python関数からのJavaメソッドの呼び出しが遅くなることを意味します(後者の場合、Mahoutのパフォーマンスは問題にならず、Py4Jを使用できます)。