nové vydanie medzivrstvy , ktorý umožňuje aplikáciám Python plný prístup ku knižniciam tried v jazyku Java. S JPype od Pythonu môžete použiť knižnice špecifické pre Java na vytváranie hybridných aplikácií, ktoré kombinujú kód Java a Python. Na rozdiel od Jythonu sa integrácia s Javou nedosahuje vytvorením variantu Pythonu pre JVM, ale interakciou na úrovni oboch virtuálnych strojov využívajúcich zdieľanú pamäť. Navrhovaný prístup umožňuje nielen dosiahnuť dobrý výkon, ale poskytuje aj prístup ku všetkým knižniciam CPython a Java. Kód projektu licencovaný pod Apache 2.0.
Hlavné zmeny:
- Do volaní metód bola pridaná vyrovnávacia pamäť, aby sa predišlo riešeniu preťaženia, čím sa výrazne znížil vplyv riešenia metód na výkon, najmä keď sa to isté preťaženie volá viackrát, napríklad počas vykonávania slučky.
- Prenos zoznamov, n-tíc a bufferov do primitívnych polí Java sa zrýchlil 4 až 100-krát v závislosti od typu údajov. Konverzia využíva optimalizovanú manipuláciu s buffermi v pamäti namiesto rozhrania Sequence API. Keď sa stretne s bufferom Pythonu, kontroluje sa na konverziu iba prvý prvok, pretože tieto buffery sú homogénne.
- Spracovanie vypínania (implementované v JPype 1.0.0, ale vynechané zo zoznamu zmien). JPype teraz volá rutinu vypínania JVM, ktorá sa pokúša o elegantné ukončenie. To má za následok niekoľko zmien v správaní. Vlákna, ktoré nie sú na pozadí (proxy volania), teraz môžu udržiavať JVM otvorené, kým sa neukončia. Proxy volania budú spracovávať vypínanie, kým sa volanie nedokončí, ale dostanú správu o prerušení. Súbory sa teraz správne zatvoria a vyprázdnia, ak vlákna správne spracujú výnimku. Vykonávajú sa hooky a finalizátory na čistenie zdrojov. Hooky AtExit sa volajú pri vytváraní vlákien. Automatické spájanie vlákien je teraz implementované prostredníctvom démona pri použití JVM z Pythonu. Chybný kód, ktorý nedokáže správne spracovať čistenie vlákien, sa pravdepodobne pri vykonávaní vypínania zaseká. Ďalšia dokumentácia je k dispozícii v návode na použitie.
- Wrapper Throwable dostával wrapper Object namiesto očakávaného výsledku, čo viedlo k zvláštnym konverziám z tried Pythonu.
- Opravené preklepy v systéme importu, ktoré mohli viesť k chybe „jname“ not found.
- Zabezpečené správne prepínanie medzi príkazom „^C“ a prerušením klávesnice.
- Opravený problém so symbolmi v Pythone 3.5.3. Funkcia PySlice_Unpack bola zavedená v následnej aktualizácii (3.5.4) a nemala sa používať.
- Chyba spôsobujúca pád súboru numpy.linalg.inv bola vyriešená. Problém bol vysledovaný do interakcií vlákien medzi JVM a určitými variantmi NumPy. Navrhovaným riešením je volať numpy.linalg.inv pred spustením JVM.
Zdroj: opennet.ru
