JPype 1.0.2 アップデート、Python から Java クラスにアクセスするためのライブラリ

利用可能 中間膜の新リリース JPype 1.0.2これにより、Python アプリケーションは Java 言語のクラス ライブラリに完全にアクセスできるようになります。 Python の JPype を使用すると、Java 固有のライブラリを使用して、Java と Python コードを組み合わせたハイブリッド アプリケーションを作成できます。 Jython とは異なり、Java との統合は、JVM の Python バリアントの作成を通じてではなく、共有メモリを使用した両方の仮想マシン レベルでの対話を通じて実現されます。 提案されたアプローチでは、優れたパフォーマンスを達成できるだけでなく、すべての CPython および Java ライブラリへのアクセスも提供します。 プロジェクトコード によって配布 Apache 2.0 に基づいてライセンスされています。

主な変更点:

  • オーバーロード解決を回避するためにメソッド呼び出しにキャッシュが追加されました。これにより、特にループ実行中など同じオーバーロードが何度も呼び出される場合、メソッド解決によるパフォーマンスへの影響が大幅に軽減されます。
  • データ型に応じて、Java プリミティブの配列へのリスト、タプル、およびバッファの転送が 4 ~ 100 倍高速化されます。 変換では、シーケンス API の代わりに、メモリ内バッファーの最適化された処理が使用されます。 Python バッファーが見つかった場合、これらのバッファーは同種であるため、最初の要素のみが変換のためにチェックされます。
  • シャットダウン操作の処理 (JPype 1.0.0 で実装されましたが、変更ログの準備時にスキップされました)。 JPype は JVM シャットダウン ルーチンを呼び出し、正常に終了しようとします。 これにより、動作にいくつかの変化が生じます。 非バックグラウンド スレッド (プロキシ呼び出し) は、終了するまで JVM を開いたままにできるようになりました。 プロキシ呼び出しは、呼び出しが完了するまでシャットダウンを処理しますが、中止メッセージを受け取ります。 スレッドが期待どおりに例外を処理した場合、ファイルは適切に閉じられ、ディスクにフラッシュされるようになりました。 リソースのクリーンアップ フックとファイナライザーが実行されます。 スレッドが生成されると、AtExit フックが呼び出されます。 Python から JVM を使用する場合、デーモンを通じて自動スレッド接続が実装されます。 スレッドのクリーンアップを適切に処理できないバグのあるコードは、シャットダウンの実行時にハングする可能性があります。 追加のドキュメントはユーザーマニュアルに記載されています。
  • Throwable のラッパーが、予期した結果ではなく Object のラッパーを受け取ったため、Python クラスからの奇妙な変換が発生しました。
  • 「»jname» が見つかりません」というエラーを引き起こすインポート システムのタイプミスを修正しました。
  • KeyboardInterrupt で「^C」が正しくプロモートされるようにしました。
  • Python 3.5.3 以降のシンボルに関する問題を修正しました。 PySlice_Unpack は後続のパッチ リリース (3.5.4) で導入されたため、使用すべきではありませんでした。
  • クラッシュを引き起こす numpy.linalg.inv のバグを修正しました。 この問題は、JVM といくつかの numpy フレーバー間のスレッド通信に起因することが追跡されています。 提案される解決策は、JVM を開始する前に numpy.linalg.inv を呼び出すことです。

出所: オープンネット.ru

コメントを追加します