nieuwe release van de laag , waarmee volledige toegang tot Java-klassenbibliotheken voor Python-applicaties kan worden georganiseerd. Met JPype kunnen specifieke Java-bibliotheken vanuit Python worden gebruikt, waardoor hybride applicaties ontstaan die zowel Java- als Python-code combineren. In tegenstelling tot Jython wordt de integratie met Java niet bereikt door een versie van Python voor de JVM te creƫren, maar door interactie op het niveau van beide virtuele machines met behulp van gedeeld geheugen. Deze aanpak maakt het niet alleen mogelijk om goede prestaties te bereiken, maar biedt ook toegang tot alle CPython- en Java-bibliotheken. De projectcode onder de Apache 2.0-licentie.
Belangrijkste wijzigingen:
- Er is een cache toegevoegd aan het aanroepen van methoden, waarmee het oplossen van overloads kan worden vermeden. Dit vermindert aanzienlijk de impact op de prestaties van het oplossen van methoden, vooral als dezelfde overload meerdere keren wordt aangeroepen, zoals tijdens het uitvoeren van lussen.
- De overdracht van lijsten, tuples en buffers naar Java-primitive arrays is tussen de 4 en 100 keer versneld, afhankelijk van het type gegevens. De conversie maakt gebruik van geoptimaliseerde bufferverwerking in het geheugen, in plaats van de Sequence API. Wanneer een Python-buffer wordt aangetroffen, wordt alleen het eerste element gecontroleerd voor conversie, omdat deze gegevensbuffers homogeen zijn.
- Afhandelingsprocedures voor shutdown (al geïmplementeerd in JPype 1.0.0, maar gemist in de changelog). JPype roept nu de shutdown-procedure van de JVM aan, die probeert de sluiting 'gracefully' uit te voeren. Dit leidt tot verschillende wijzigingen in het gedrag. Geen achtergrondthreads (proxy call) kunnen nu de JVM openhouden totdat ze zijn beëindigd. Proxy-aanroepen zullen de shutdown afhandelen totdat de aanroep is voltooid, maar zullen een onderbrekingsmelding ontvangen. Bestanden worden nu correct gesloten en de gegevens worden naar de schijf weggeschreven (flush), als de threads de uitzondering op de juiste manier verwerken. Opruimhooks en finalizers worden uitgevoerd. Bij het creëren van threads worden AtExit-hooks aangeroepen. Via de daemon is er automatische aansluiting van threads gerealiseerd bij het gebruik van de JVM vanuit Python. Foutcodes die de opruiming van threads niet correct kunnen afhandelen, kunnen vastlopen tijdens de shutdown. Verdere documentatie is beschikbaar in de gebruiksgids.
- De wrapper voor Throwable kreeg een wrapper voor Object in plaats van het verwachte resultaat, wat leidde tot vreemde conversies van Python-klassen.
- Typfouten in het importsysteem zijn gecorrigeerd, wat leidde tot de foutmelding āĀ»jnameĀ» niet gevondenā.
- Correcte doorvoer van ā^Cā in KeyboardInterrupt gegarandeerd.
- Probleem met symbolen met Python 3.5.3 is verholpen. PySlice_Unpack werd geĆÆntroduceerd in de volgende patchrelease (3.5.4) en had niet gebruikt moeten worden.
- Een fout met numpy.linalg.inv is opgelost, wat leidde tot crashes. Het probleem werd teruggevonden tot thread-interacties tussen de JVM en bepaalde versies van numpy. De voorgestelde oplossing is om numpy.linalg.inv aan te roepen voordat de JVM wordt gestart.
Bron: opennet.ru
