Update JPype 1.0.2, einer Bibliothek für den Zugriff auf Java-Klassen aus Python

Verfügbar neue Ausgabe der Schicht JPype 1.0.2, die vollständigen Zugriff auf die Java-Klassenbibliotheken für Python-Anwendungen ermöglicht. Mit JPype können spezifische Java-Bibliotheken aus Python verwendet werden, wodurch hybride Anwendungen geschaffen werden, die Java- und Python-Code kombinieren. Im Gegensatz zu Jython wird die Integration mit Java nicht durch die Erstellung einer Python-Variante für die JVM erreicht, sondern durch die Interaktion auf der Ebene beider virtueller Maschinen unter Verwendung von gemeinsamem Speicher. Der vorgeschlagene Ansatz ermöglicht nicht nur eine gute Leistung, sondern bietet auch Zugang zu allen CPython- und Java-Bibliotheken. Der Code des Projekts wird verbreitet unter der Apache 2.0 Lizenz.

Hauptänderungen:

  • Im Aufruf von Methoden wurde ein Cache hinzugefügt, der die Auflösungen von Überladungen vermeidet, was erheblich die Auswirkungen auf die Leistung der Methodenauflösungen verringert, insbesondere wenn dieselbe Überladung häufig aufgerufen wird, wie während Schleifen.
  • Die Übergabe von Listen, Tupeln und Puffern an Java-Primitiv-Arrays wurde je nach Datentyp um das 4- bis 100-Fache beschleunigt. Die Umwandlung nutzt eine optimierte Verarbeitung von Puffern im Speicher statt der Sequence API. Wenn ein Python-Puffer begegnet wird, wird nur das erste Element auf Transformation überprüft, da die Datenpuffer homogen sind.
  • Die Behandlung von Shutdown-Operationen (bereits in JPype 1.0.0 implementiert, aber in der Änderungsübersicht übersehen). JPype ruft jetzt die Shutdown-Prozedur der JVM auf, die versucht, den Ausstieg im Modus 'gracefully' durchzuführen. Dies führt zu mehreren Verhaltensänderungen. Keine Hintergrund-Threads (Proxy-Aufruf) können die JVM nun geöffnet halten, bis sie abgeschlossen sind. Proxy-Aufrufe verarbeiten Shutdown, solange der Aufruf nicht abgeschlossen ist, erhalten jedoch eine Unterbrechungsnachricht. Dateien werden jetzt ordnungsgemäß geschlossen und schreiben Daten auf die Festplatte (flush), wenn Threads Ausnahmen entsprechend behandeln. Aufräumhaken und Finalizer werden ausgeführt. Bei der Erzeugung von Threads werden AtExit-Hooks aufgerufen. Über den Daemon wird eine automatische Priolierung von Threads bei der Nutzung der JVM von Python aus bereitgestellt. Fehlercode, der die Threadbereinigung nicht korrekt verarbeiten kann, hängt wahrscheinlich während des Shutdowns fest. Zusätzliche Dokumentation ist im Benutzerhandbuch verfügbar.
  • Die Wrapper für Throwable erhielten eine Wrapper für Object statt dem erwarteten Ergebnis, was zu merkwürdigen Umwandlungen aus Python-Klassen führte.
  • Rechtschreibfehler im Importsystem behoben, die zur Fehlerausgabe '»jname» not found' führten.
  • Die korrekte Weitergabe von ' ^C ' an KeyboardInterrupt wurde sichergestellt.
  • Ein Problem mit den Zeichen von Python 3.5.3 wurde behoben. PySlice_Unpack wurde in einem späteren Patch-Release (3.5.4) eingeführt und sollte nicht verwendet werden.
  • Ein Fehler mit numpy.linalg.inv, der zu einem Absturz führte, wurde behoben. Das Problem wurde auf die Interaktion von Threads zwischen der JVM und einigen Varianten von numpy zurückverfolgt. Die empfohlene Lösung besteht darin, numpy.linalg.inv vor dem Start der JVM aufzurufen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4