Pembaruan JPype 1.0.2, perpustakaan untuk mengakses kelas Java dari Python

Tersedia rilis baru interlayer JPype 1.0.2, yang memungkinkan aplikasi Python memiliki akses penuh ke perpustakaan kelas dalam bahasa Java. Dengan JPype dari Python, Anda dapat menggunakan perpustakaan khusus Java untuk membuat aplikasi hybrid yang menggabungkan kode Java dan Python. Berbeda dengan Jython, integrasi dengan Java dicapai bukan melalui pembuatan varian Python untuk JVM, namun melalui interaksi di tingkat kedua mesin virtual menggunakan memori bersama. Pendekatan yang diusulkan memungkinkan tidak hanya mencapai kinerja yang baik, tetapi juga menyediakan akses ke semua perpustakaan CPython dan Java. Kode proyek didistribusikan oleh berlisensi di bawah Apache 2.0.

Perubahan besar:

  • Cache telah ditambahkan ke pemanggilan metode untuk menghindari resolusi kelebihan beban, yang sangat mengurangi dampak kinerja resolusi metode, terutama jika kelebihan beban yang sama dipanggil berkali-kali, seperti selama eksekusi loop.
  • Dari 4 hingga 100 kali, tergantung pada tipe datanya, transfer daftar, tupel, dan buffer ke array primitif Java dipercepat. Konversi ini menggunakan pemrosesan buffer dalam memori yang dioptimalkan, bukan Sequence API. Ketika buffer Python ditemukan, hanya elemen pertama yang diperiksa untuk konversi, karena buffer ini homogen.
  • Memproses operasi penghentian (diimplementasikan di JPype 1.0.0, tetapi dilewati saat menyiapkan log perubahan). JPype sekarang memanggil rutinitas pematian JVM, yang mencoba keluar dengan baik. Hal ini menyebabkan beberapa perubahan perilaku. Thread non-latar belakang (panggilan proxy) sekarang dapat menjaga JVM tetap terbuka hingga selesai. Panggilan proxy akan memproses penutupan hingga panggilan selesai, tetapi akan menerima pesan batalkan. File sekarang ditutup dengan benar dan dipindahkan ke disk jika thread menangani pengecualian seperti yang diharapkan. Kait dan finalisator pembersihan sumber daya dijalankan. Saat benang muncul, kait AtExit dipanggil. Melalui daemon, lampiran thread otomatis diimplementasikan saat menggunakan JVM dari Python. Kode buggy yang tidak dapat menangani pembersihan thread dengan benar kemungkinan akan hang saat shutdown dijalankan. Dokumentasi tambahan dapat ditemukan di panduan pengguna.
  • Pembungkus untuk Throwable menerima pembungkus untuk Object alih-alih hasil yang diharapkan, yang menyebabkan konversi aneh dari kelas Python.
  • Memperbaiki kesalahan ketik pada sistem impor yang mengakibatkan kesalahan '»jname» tidak ditemukan'.
  • Memastikan bahwa "^C" dipromosikan dengan benar di KeyboardInterrupt.
  • Memperbaiki masalah simbol sejak Python 3.5.3. PySlice_Unpack diperkenalkan pada rilis patch berikutnya (3.5.4) dan seharusnya tidak digunakan.
  • Memperbaiki bug pada numpy.linalg.inv yang menyebabkan kerusakan. Masalahnya telah ditelusuri ke komunikasi thread antara JVM dan beberapa varian numpy. Solusi yang diusulkan adalah memanggil numpy.linalg.inv sebelum memulai JVM.

Sumber: opennet.ru

Tambah komentar