Kemas kini JPype 1.0.2, perpustakaan untuk mengakses kelas Java daripada Python

Ada keluaran baharu interlayer jpg 1.0.2, yang membolehkan aplikasi Python mempunyai akses penuh kepada perpustakaan kelas dalam bahasa Java. Dengan JPype daripada Python, anda boleh menggunakan perpustakaan khusus Java untuk mencipta aplikasi hibrid yang menggabungkan kod Java dan Python. Tidak seperti Jython, integrasi dengan Java dicapai bukan melalui mencipta varian Python untuk JVM, tetapi melalui interaksi pada tahap kedua-dua mesin maya menggunakan memori dikongsi. Pendekatan yang dicadangkan membolehkan bukan sahaja mencapai prestasi yang baik, tetapi juga menyediakan akses kepada semua perpustakaan CPython dan Java. Kod projek diedarkan oleh berlesen di bawah Apache 2.0.

Perubahan utama:

  • Cache telah ditambahkan pada panggilan kaedah untuk mengelakkan resolusi beban lampau, yang sangat mengurangkan kesan prestasi resolusi kaedah, terutamanya jika beban berlebihan yang sama dipanggil berkali-kali, seperti semasa pelaksanaan gelung.
  • Daripada 4 hingga 100 kali, bergantung pada jenis data, pemindahan senarai, tupel dan penimbal kepada tatasusunan primitif Java dipercepatkan. Penukaran menggunakan pemprosesan dioptimumkan penimbal dalam memori, bukannya API Jujukan. Apabila penimbal Python ditemui, hanya elemen pertama yang diperiksa untuk penukaran, kerana penimbal ini adalah homogen.
  • Memproses operasi penutupan (dilaksanakan dalam JPype 1.0.0, tetapi telah dilangkau semasa menyediakan changelog). JPype kini memanggil rutin penutupan JVM, yang cuba untuk keluar dengan anggun. Ini membawa kepada beberapa perubahan dalam tingkah laku. Benang bukan latar belakang (panggilan proksi) kini boleh memastikan JVM dibuka sehingga ia selesai. Panggilan proksi akan memproses penutupan sehingga panggilan selesai, tetapi akan menerima mesej batalkan. Fail kini ditutup dengan betul dan disiram ke cakera jika benang mengendalikan pengecualian seperti yang diharapkan. Cangkuk pembersihan sumber dan pemuktamad dilaksanakan. Apabila benang bertelur, cangkuk AtExit dipanggil. Melalui daemon, lampiran benang automatik dilaksanakan apabila menggunakan JVM daripada Python. Kod buggy yang tidak dapat mengendalikan pembersihan benang dengan betul mungkin akan tergantung apabila penutupan dilaksanakan. Dokumentasi tambahan boleh didapati dalam manual pengguna.
  • Pembalut untuk Throwable menerima pembalut untuk Objek dan bukannya hasil yang dijangkakan, yang membawa kepada penukaran pelik daripada kelas Python.
  • Silap kesalahan dalam sistem import telah diperbaiki yang mengakibatkan ralat 'Β»jnameΒ» tidak ditemui'.
  • Memastikan bahawa "^C" telah dipromosikan dengan betul dalam KeyboardInterrupt.
  • Memperbaiki masalah dengan simbol sejak Python 3.5.3. PySlice_Unpack telah diperkenalkan dalam keluaran tampalan berikutnya (3.5.4) dan tidak sepatutnya digunakan.
  • Memperbaiki pepijat dengan numpy.linalg.inv yang membawa kepada ranap sistem. Isu ini telah dikesan kepada komunikasi benang antara JVM dan beberapa rasa numpy. Penyelesaian yang dicadangkan ialah memanggil numpy.linalg.inv sebelum memulakan JVM.

Sumber: opennet.ru

Tambah komen