JPype 1.0.2-uppdatering, bibliotek för åtkomst till Java-klasser från Python

Tillgängliga ny lagersläpp JPype 1.0.2, som låter dig organisera full åtkomst av Python-applikationer till Java-klassbibliotek. Med JPype från Python kan du använda Java-specifika bibliotek för att skapa hybridapplikationer som kombinerar Java och Python-kod. Till skillnad från Jython uppnås integration med Java inte genom att skapa en Python-variant för JVM, utan genom interaktion på nivån för båda virtuella maskinerna som använder delat minne. Det föreslagna tillvägagångssättet tillåter inte bara att uppnå bra prestanda, utan ger också tillgång till alla CPython- och Java-bibliotek. Projektkod levererad av licensierad under Apache 2.0.

Huvudändringar:

  • Lade till en cache till metodanrop för att undvika överbelastningsupplösning, vilket kraftigt minskade prestandapåverkan av metodupplösning, speciellt om samma överbelastning anropas många gånger, som i loopar.
  • Från 4 till 100 gånger, beroende på typen av data, påskyndas överföringen av listor, tupler och buffertar till arrayer av Java-primitiver. Transformationen använder optimerad bufferthantering i minnet istället för Sequence API. När en Python-buffert påträffas, kontrolleras endast det första elementet för konvertering, eftersom dessa buffertar är homogena.
  • Hantera avstängningsoperationer (implementerat i JPype 1.0.0, men hoppades över när ändringsloggen förbereddes). JPype anropar nu JVM:s avstängningsprocedur, som försöker avsluta. Detta resulterar i flera beteendeförändringar. Trådar utan bakgrund (proxyanrop) kan nu hålla JVM öppen tills de avslutas. Proxysamtal kommer att bearbeta avstängning tills samtalet är slutfört, men kommer att få ett avbrytmeddelande. Filer stängs nu ordentligt och spolas till disk om trådarna hanterar undantaget korrekt. Resursrensningskrokar och slutbehandlare exekveras. När trådar skapas anropas AtExit-hooks. Genom demonen implementeras automatisk trådbifogning när JVM från Python används. Den felaktiga koden som inte lyckas hantera trådrensningen på rätt sätt kommer sannolikt att hänga på avstängning. Ytterligare dokumentation finns i användarhandboken.
  • Inpackningen för Throwable fick en wrapper för Object istället för det förväntade resultatet, vilket ledde till konstiga konverteringar från Python-klasser.
  • Fixade stavfel i importsystemet som resulterade i ett '"jname" not found'-fel.
  • Säkerställd korrekt marknadsföring av "^C" i KeyboardInterrupt.
  • Fixat problem med symboler från och med Python 3.5.3. PySlice_Unpack introducerades i en efterföljande patchversion (3.5.4) och borde inte ha använts.
  • Fixade en krasch med numpy.linalg.inv. Problemet har spårats tillbaka till trådinteraktion mellan JVM och vissa varianter av numpy. Den föreslagna lösningen är att anropa numpy.linalg.inv innan JVM startas.

Källa: opennet.ru

Lägg en kommentar