új rétegezési kiadás , amely teljes hozzáférést biztosít a Python-alkalmazások számára a Java nyelvű osztálykönyvtárakhoz. A JPype segítségével a Pythonból használhatók a Java-specifikus könyvtárak, hibrid alkalmazások létrehozva, amelyek kombinálják a Java és a Python kódot. A Jythontól eltérően a Java integráció nem a JVM-hez készült Python verzió létrehozásával érhető el, hanem a két virtuális gép közötti interakció révén, megosztott memóriát használva. Ez a megközelítés nemcsak jó teljesítményt nyújt, hanem hozzáférést biztosít az összes CPython és Java könyvtárhoz is. A projekt kódja Apache 2.0 licenc alatt.
Főbb változások:
- A metódushívásokhoz cache került hozzáadásra, amely megakadályozza a túlterhelések feloldását, így jelentősen csökkenti a metódusok feloldásának teljesítményhatását, különösen, ha ugyanazt a túlterhelést többször hívják meg, például ciklusok végrehajtása közben.
- A listák, tuple-ök és pufferek Java primitív tömbökbe való átvitelének sebessége 4 és 100-szor között változik, az adatok típusától függően. A konvertálás optimalizált pufferekkel történik a memóriában, a Sequence API helyett. Amikor Python-pufferrel találkozunk, csak az első elemet ellenőrizzük konvertálásra, mivel az adatok pufferei homogénok.
- A leállási műveletek kezelése (már a JPype 1.0.0-ban megvalósítva, de a változások listájának elkészítésekor elfelejtve). A JPype mostantól meghívja a JVM leállítási eljárását, amely megpróbálja a leállást «gracefully» megvalósítani. Ez több viselkedésbeli változást von maga után. A háttérszálak (proxy hívások) mostantól a JVM-et nyitva tarthatják, amíg be nem fejeződnek. A Proxy hívások a leállítást kezelik, amíg a hívás be nem fejeződik, de megszakítási üzenetet kapnak. A fájlok most helyesen záródnak és kifolyik az adat a lemezre (flush), ha a szálak megfelelően kezelik a kivételt. Erőforrás-tisztító horgok és finalizátorok futnak. Szálak létrehozásakor AtExit-horgok hívódnak. A demonon keresztül automatikus csatlakoztatás valósul meg a JVM Pythonból való használata esetén. A hibás kód, amely nem tudja helyesen kezelni a szálak tisztítását, valószínűleg felfüggesztésre kerül a leállítás végrehajtása során. További dokumentáció elérhető a használati útmutatóban.
- A Throwable környezetbe való beillesztése Object környezetbe ment, a várható eredmény helyett, ami furcsa konverziókat okozott a Python osztályokból.
- A rendszerimportban elvégzett elírások javítva, amelyek a ‘»jname» not found’ hibaüzenet kimenetéhez vezettek.
- Biztosítva van a «^C» helyes továbbítása a KeyboardInterrupt esetén.
- A Python 3.5.3-mal kapcsolatos karakterek problémája megoldva. A PySlice_Unpack a következő patch-kibocsátáskor (3.5.4) került bevezetésre, és nem lett volna szabad használni.
- Hiba megoldva a numpy.linalg.inv esetében, amely összeomláshoz vezetett. A probléma a JVM és néhány numpy verzió közötti szálközi interakcióra vezethető vissza. Javasolt megoldás a numpy.linalg.inv meghívása a JVM elindítása előtt.
Forrás: opennet.ru
