JPype 1.0.2-oppdatering, et bibliotek for tilgang til Java-klasser fra Python

Tilgjengelig ny utgivelse av mellomlag JPype 1.0.2, som lar deg organisere full tilgang til Python-applikasjoner til Java-klassebiblioteker. Med JPype fra Python kan du bruke Java-spesifikke biblioteker til å lage hybridapplikasjoner som kombinerer Java- og Python-kode. I motsetning til Jython, oppnås integrering med Java ikke gjennom å lage en Python-variant for JVM, men gjennom interaksjon på nivået til begge virtuelle maskiner som bruker delt minne. Den foreslåtte tilnærmingen tillater ikke bare å oppnå god ytelse, men gir også tilgang til alle CPython- og Java-biblioteker. Prosjektkode distribuert av lisensiert under Apache 2.0.

Hovedendringer:

  • En cache er lagt til metodekall for å unngå overbelastningsoppløsning, noe som i stor grad reduserer ytelseseffekten av metodeoppløsning, spesielt hvis den samme overbelastningen kalles opp mange ganger, som under løkkekjøring.
  • Fra 4 til 100 ganger, avhengig av datatypen, akselereres overføringen av lister, tupler og buffere til arrays av Java-primitiver. Konverteringen bruker optimalisert behandling av minnebuffere, i stedet for Sequence API. Når en Python-buffer påtreffes, blir bare det første elementet sjekket for konvertering, siden disse bufferne er homogene.
  • Behandler avslutningsoperasjoner (implementert i JPype 1.0.0, men ble hoppet over da endringsloggen ble klargjort). JPype kaller nå JVM-avslutningsrutinen, som prøver å avslutte på en elegant måte. Dette fører til flere endringer i atferd. Tråder uten bakgrunn (proxy-anrop) kan nå holde JVM åpen til de er ferdige. Proxy-anrop vil behandle avslutningen til samtalen er fullført, men vil motta en avbruddsmelding. Filer er nå lukket ordentlig og tømt til disk hvis trådene håndterer unntaket som forventet. Ressursoppryddingskroker og sluttbehandlere blir utført. Når tråder spawnes, kalles AtExit-hooks. Gjennom daemonen implementeres automatisk trådvedlegg ved bruk av JVM fra Python. Buggy-kode som ikke kan håndtere trådopprydding på riktig måte, vil sannsynligvis henge når avslutningen utføres. Ytterligere dokumentasjon finnes i brukermanualen.
  • Innpakningen for Throwable mottok en wrapper for Object i stedet for det forventede resultatet, noe som førte til merkelige konverteringer fra Python-klasser.
  • Rettet skrivefeil i importsystemet som resulterte i feilen '»jname» ikke funnet'.
  • Sørget for at "^C" ble promotert riktig i KeyboardInterrupt.
  • Rettet problem med symboler siden Python 3.5.3. PySlice_Unpack ble introdusert i en påfølgende oppdateringsutgivelse (3.5.4) og skulle ikke ha blitt brukt.
  • Rettet en feil med numpy.linalg.inv som førte til en krasj. Problemet har blitt sporet til trådkommunikasjon mellom JVM og noen nummede smaker. Den foreslåtte løsningen er å ringe numpy.linalg.inv før du starter JVM.

Kilde: opennet.ru

Legg til en kommentar