nové vydanie vrstvy , ktoré umožňuje plný prístup Python aplikácií k Java knižniciam. S JPype môžu Python aplikácie využívať špecifické Java knižnice a vytvárať hybridné aplikácie kombinujúce kód v Jave a Pythone. Na rozdiel od Jythonu, integrácia s Javou sa dosahuje nie cez vytvorenie verzie Pythonu pre JVM, ale cez interakciu na úrovni oboch virtuálnych strojov, pričom sa využíva zdieľaná pamäť. Navrhovaný prístup umožňuje nielen dosiahnuť dobrý výkon, ale aj poskytuje prístup ku všetkým knižniciam CPython a Javy. Kód projektu pod licenciou Apache 2.0.
Hlavné zmeny:
- Do volaní metód bol pridaný cache, ktorý zabraňuje rozlišovaniu preťaženia, čo výrazne znižuje vplyv na výkon pri rozlišovaní metód, najmä ak sa to isté preťaženie volá viackrát, ako pri výkone cyklov.
- Prenos zoznamov, n-tíc a búferov do polí Java primitívov bol zrýchlený od 4 do 100-krát, v závislosti od typu údajov. Transformácia využíva optimalizované spracovanie búferov v pamäti, namiesto Sequence API. Pri stretnutí s búferom Pythonu sa kontroluje len prvý prvok na transformáciu, pretože tieto dáta sú homogénne.
- Spracovanie operácií vypnutia (realizované už v JPype 1.0.0, ale bolo prehliadnuté pri príprave zoznamu zmien). JPype teraz vyvoláva shutdown procedúru JVM, ktorá sa pokúša o odhlásenie v režime „gracefully“. To vedie k niekoľkým zmenám v správaní. Nezávislé vlákna (proxy volanie) môžu teraz udržiavať JVM otvorený, kým nie sú dokončené. Volania Proxy spracujú vypnutie, kým volanie nie je dokončené, ale dostanú správu o prerušení. Súbory sa teraz správne zatvárajú a zapisujú údaje na disk (flush), ak vlákna spracujú výnimku potrebným spôsobom. Vykonávajú sa čistiace háky a finalizátory. Pri generovaní vlákien sú vyvolané AtExit háky. Prostriedok demon realizuje automatické pripojenie vlákien pri používaní JVM z Pythonu. Chybový kód, ktorý nemôže správne spracovať čistenie vlákna, pravdepodobne zablokuje proces pri vypínaní. Ďalšia dokumentácia je dostupná v príručke.
- Zabalenie pre Throwable dostalo zabalenie pre Object namiesto očakávaného výsledku, čo viedlo k divným transformáciám z Python tried.
- Opravené preklepy v systéme importu, ktoré spôsobovali zobrazenie chyby '»jname» not found'.
- Zabezpečené správne propagovanie «^C» v KeyboardInterrupt.
- Odstránený problém so znakmi v Pythone 3.5.3. PySlice_Unpack bol zavedený v následnej opravnej verzii (3.5.4) a nemal sa používať.
- Analyzovaná chyba s numpy.linalg.inv, ktorá spôsobovala pád. Problém bol sledovaný až k interakcii vlákien medzi JVM a niektorými variantmi numpy. Navrhované riešenie — zavolať numpy.linalg.inv pred spustením JVM.
Zdroj: opennet.ru
