nova izdaja vmesnika , ki omogoča popoln dostop Python aplikacij do knjižnic razredov v jeziku Java. Z uporabo JPype lahko iz Pythona uporabljate specifične knjižnice Java in ustvarjate hibridne aplikacije, ki združujejo kodo v Java in Python. V nasprotju z Jythonom se integracija z Javo ne doseže s kreiranjem različice Pythona za JVM, temveč z interakcijo na ravni obeh virtualnih strojev, pri čemer se uporablja deljena pomnilniška prostorska. Predlagan pristop omogoča dosego dobre zmogljivosti ter dostop do vseh knjižnic CPython in Java. Koda projekta pod licenco Apache 2.0.
Glavne spremembe:
- V klice metod je dodan predpomnilnik, ki preprečuje razreševanje prenoveritev, kar znatno zmanjšuje vpliv na zmogljivost razreševanja metod, še posebej, če se ista prenoveritev kliče večkrat, kot med izvajanjem zank.
- Od 4 do 100-krat, odvisno od vrste podatkov, je pospešena prenos seznamov, tuplov in pomnilniških blokov v matrike Java osnovnih tipov. Pretvorba uporablja optimizirano obdelavo pomnilniških blokov, namesto Sequence API. Ko se sreča Python pomnilniški blok, se preveri le prvi element za pretvorbo, saj so ti podatkovni bloki enotnega tipa.
- Obdelava operacij zapiranja (implementirana že v JPype 1.0.0, vendar spregledana pri pripravi seznama sprememb). JPype zdaj kliče zaporni postopek JVM, ki poskuša izvesti izhod v načinu 'gracefully'. To vodi do nekaterih sprememb v vedenju. Neozadnji niti (proxy call) zdaj lahko držijo JVM odprt, dokler se ne končajo. Klici Proxy bodo obvladali zapiranje, dokler klic ni končan, vendar bodo prejeli sporočilo o prekinitvi. Datoteke se zdaj pravilno zaprejo in podatki se zapišejo na disk (flush), če niti obdelajo izjemo na pravilen način. Izvajajo se čiščenja virov in finalizatorji. Pri ustvarjanju niti se kličejo AtExit klici. Samodejno pridruževanje niti pri uporabi JVM iz Pythona se izvaja prek demona. Napaka v kodi, ki ne more pravilno obvladati čiščenja niti, verjetno obtiči med izvajanjem zapiranja. Dodatna dokumentacija je na voljo v priročniku za uporabo.
- Wrap for Throwable received a wrap for Object instead of the expected result, leading to strange transformations from Python classes.
- Typos in the import system have been fixed, which caused the error output ‘»jname» not found’.
- Correct promotion of ‘^C’ in KeyboardInterrupt has been ensured.
- The issue with characters in Python 3.5.3 has been resolved. PySlice_Unpack was introduced in a subsequent patch release (3.5.4) and should not have been used.
- The error with numpy.linalg.inv causing crashes has been diagnosed. The issue was traced back to thread interactions between the JVM and certain numpy distributions. The suggested solution is to call numpy.linalg.inv before starting JVM.
Izvor: opennet.ru
