ny udgave af lag , som muliggør fuld adgang for Python-applikationer til klassebiblioteker skrevet i Java. Med JPype kan man fra Python bruge Java-specifikke biblioteker og skabe hybride applikationer, der kombinerer kode skrevet i Java og Python. I modsætning til Jython opnås integration med Java ikke ved at skabe en variant af Python til JVM, men gennem interaktion på niveauet for begge virtuelle maskiner ved hjælp af delt hukommelse. Den foreslåede tilgang muliggør ikke kun god ydeevne, men giver også adgang til alle CPython- og Java-biblioteker. Projektkoden er under Apache 2.0-licensen.
Vigtige ændringer:
- Metodeopkald har fået en cache, der gør det muligt at undgå at løse overbelastninger, hvilket markant reducerer indflydelsen på ydeevnen ved metodeoprettelse, især hvis den samme overbelastning kaldes mange gange, som under udførelse af sløjfer.
- Overføre lister, tupler og buffere til Java primitive arrays er blevet accelereret fra 4 til 100 gange, afhængigt af datatypen. Konverteringen bruger optimeret bufferbehandling i hukommelsen, i stedet for Sequence API. Når Python-bufferen mødes, kontrolleres kun det første element for konvertering, da datatrækkene er homogene.
- Shutdown-operationer er blevet behandlet (implementeret allerede i JPype 1.0.0, men blev glemt ved forberedelsen af ændringslisten). JPype kalder nu shut down-rutinen for JVM, der forsøger at afslutte i 'graceful' tilstand. Dette fører til flere ændringer i adfærd. Ikke-baggrundstråde (proxy call) kan nu holde JVM åben, indtil de er afsluttet. Proxy-opkald vil behandle shutdown, indtil opkaldet er færdiggjort, men vil modtage en afbrydelsesmeddelelse. Filer lukkes nu korrekt og data skrives til disk (flush), hvis trådene behandler undtagelsen korrekt. Rydningshooks og finalizere udføres. På trådoprettelse kaldes AtExit-hooks. Der er implementeret automatisk tilslutning af tråde ved brug af JVM fra Python gennem en daemon. Fejlkoden, der ikke korrekt kan håndtere rydningen af tråden, vil sandsynligvis hænge under shutdown. Yderligere dokumentation findes i brugsvejledningen.
- Wrap for Throwable fik en wrap for Object i stedet for det forventede resultat, hvilket førte til mærkelige konverteringer fra Python-klasser.
- Rettede tastefejl i importsystemet, der førte til fejlmeddelelsen '»jname» not found'.
- Sikret korrekt fremdrift af «^C» i KeyboardInterrupt.
- Problemet med tegn fra Python 3.5.3 er blevet rettet. PySlice_Unpack blev introduceret i den efterfølgende patch-release (3.5.4) og skulle ikke have været brugt.
- Fejl med numpy.linalg.inv, der førte til nedbrud er blevet løst. Problemet blev sporet til trådeinteraktioner mellem JVM og nogle varianter af numpy. Den foreslåede løsning er at kalde numpy.linalg.inv inden opstart af JVM.
Kilde: opennet.ru
