JPype 1.0.2 update, bibliotheken voor toegang tot Java-klassen vanuit Python

Beschikbaar nieuwe release van tussenlaag JPype 1.0.2, waarmee Python-applicaties volledige toegang hebben tot klassenbibliotheken in de Java-taal. Met JPype van Python kunt u Java-specifieke bibliotheken gebruiken om hybride applicaties te maken die Java- en Python-code combineren. In tegenstelling tot Jython wordt integratie met Java niet bereikt door het creëren van een Python-variant voor de JVM, maar door interactie op het niveau van beide virtuele machines met behulp van gedeeld geheugen. De voorgestelde aanpak maakt niet alleen goede prestaties mogelijk, maar biedt ook toegang tot alle CPython- en Java-bibliotheken. Projectcode gedistribueerd door gelicentieerd onder Apache 2.0.

Grote veranderingen:

  • Er is een cache toegevoegd aan methodeaanroepen om overbelastingsresolutie te voorkomen, waardoor de prestatie-impact van methoderesolutie aanzienlijk wordt verminderd, vooral als dezelfde overbelasting vele malen wordt aangeroepen, zoals tijdens het uitvoeren van een lus.
  • Afhankelijk van het gegevenstype wordt de overdracht van lijsten, tupels en buffers naar arrays van Java-primitieven 4 tot 100 keer versneld. De conversie maakt gebruik van geoptimaliseerde verwerking van buffers in het geheugen, in plaats van de Sequence API. Wanneer een Python-buffer wordt aangetroffen, wordt alleen het eerste element gecontroleerd op conversie, aangezien deze buffers homogeen zijn.
  • Verwerking van afsluitbewerkingen (geïmplementeerd in JPype 1.0.0, maar werd overgeslagen bij het voorbereiden van de changelog). JPype roept nu de JVM-afsluitroutine aan, die probeert netjes af te sluiten. Dit leidt tot verschillende gedragsveranderingen. Niet-achtergrondthreads (proxy-oproepen) kunnen de JVM nu open houden totdat ze klaar zijn. Bij proxyoproepen wordt het afsluiten verwerkt totdat het gesprek is voltooid, maar er wordt een afbreekbericht ontvangen. Bestanden worden nu correct gesloten en naar schijf gespoeld als de threads de uitzondering zoals verwacht afhandelen. Hooks en finalizers voor het opschonen van bronnen worden uitgevoerd. Wanneer threads worden voortgebracht, worden AtExit-hooks aangeroepen. Via de daemon wordt automatische thread-bijlage geïmplementeerd bij gebruik van de JVM van Python. Bugcode die het opschonen van threads niet goed kan afhandelen, blijft waarschijnlijk hangen wanneer het afsluiten wordt uitgevoerd. Aanvullende documentatie vindt u in de gebruikershandleiding.
  • De wrapper voor Throwable ontving een wrapper voor Object in plaats van het verwachte resultaat, wat leidde tot vreemde conversies van Python-klassen.
  • Typefouten in het importsysteem opgelost die resulteerden in de fout '»jname» niet gevonden'.
  • Zorgde ervoor dat "^C" correct werd gepromoot in KeyboardInterrupt.
  • Probleem met symbolen opgelost sinds Python 3.5.3. PySlice_Unpack werd geïntroduceerd in een volgende patchrelease (3.5.4) en had niet mogen worden gebruikt.
  • Een bug met numpy.linalg.inv opgelost die tot een crash leidde. Het probleem is terug te voeren op de threadcommunicatie tussen de JVM en een aantal numpy-smaken. De voorgestelde oplossing is om numpy.linalg.inv aan te roepen voordat de JVM wordt gestart.

Bron: opennet.ru

Voeg een reactie