JPype 1.0.2-opdatering, biblioteker til adgang til Java-klasser fra Python

Ledig ny lagudgivelse JPype 1.0.2, som giver dig mulighed for at organisere fuld adgang til Python-applikationer til Java-klassebiblioteker. Med JPype fra Python kan du bruge Java-specifikke biblioteker til at skabe hybride applikationer, der kombinerer Java og Python-kode. I modsætning til Jython opnås integration med Java ikke gennem oprettelsen af ​​en Python-variant til JVM, men gennem interaktion på niveau med begge virtuelle maskiner, der bruger delt hukommelse. Den foreslåede tilgang giver ikke kun mulighed for at opnå god ydeevne, men giver også adgang til alle CPython- og Java-biblioteker. Projektkode distribueret af licenseret under Apache 2.0.

Vigtigste ændringer:

  • Tilføjet en cache til metodekald for at undgå overbelastningsopløsning, hvilket i høj grad reducerer ydeevnepåvirkningen af ​​metodeopløsning, især hvis den samme overbelastning kaldes mange gange, som i sløjfer.
  • Fra 4 til 100 gange, afhængigt af typen af ​​data, accelereres overførslen af ​​lister, tupler og buffere til arrays af Java-primitiver. Transformationen bruger optimeret bufferhåndtering i hukommelsen i stedet for Sequence API. Når der stødes på en Python-buffer, kontrolleres kun det første element for konvertering, da disse buffere er homogene.
  • Håndtering af nedlukningsoperationer (implementeret i JPype 1.0.0, men sprunget over, da ændringsloggen blev klargjort). JPype kalder nu JVM's nedlukningsprocedure, som forsøger at afslutte elegant. Dette resulterer i flere adfærdsændringer. Ikke-baggrundstråde (proxyopkald) kan nu holde JVM'en åben, indtil de afsluttes. Proxy-opkald vil behandle nedlukning, indtil opkaldet er afsluttet, men vil modtage en afbrydelsesmeddelelse. Filer lukkes nu korrekt og skylles til disk, hvis trådene håndterer undtagelsen korrekt. Ressourceoprydningskroge og færdiggørelser udføres. Når tråde dannes, kaldes AtExit hooks. Gennem dæmonen implementeres automatisk trådvedhæftning ved brug af JVM fra Python. Den fejlagtige kode, der ikke håndterer trådoprydning korrekt, hænger sandsynligvis ved nedlukning. Yderligere dokumentation findes i brugermanualen.
  • Indpakningen til Throwable fik en wrapper til Object i stedet for det forventede resultat, hvilket førte til mærkelige konverteringer fra Python-klasser.
  • Rettede tastefejl i importsystemet, der resulterede i en '"jname" ikke fundet' fejl.
  • Sikret korrekt promovering af "^C" i KeyboardInterrupt.
  • Rettet tegnproblem med Python 3.5.3. PySlice_Unpack blev introduceret i en efterfølgende patch-udgivelse (3.5.4) og burde ikke have været brugt.
  • Rettede et nedbrud med numpy.linalg.inv. Problemet er blevet sporet tilbage til trådinteraktion mellem JVM og nogle varianter af numpy. Den foreslåede løsning er at ringe til numpy.linalg.inv før start af JVM.

Kilde: opennet.ru

Tilføj en kommentar