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

Verfügbar Neue Version von Interlayer JPype 1.0.2, wodurch Python-Anwendungen vollen Zugriff auf Klassenbibliotheken in der Java-Sprache haben. Mit JPype von Python können Sie Java-spezifische Bibliotheken verwenden, um Hybridanwendungen zu erstellen, 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 Nutzung des gemeinsamen Speichers. Der vorgeschlagene Ansatz ermöglicht nicht nur eine gute Leistung, sondern bietet auch Zugriff auf alle CPython- und Java-Bibliotheken. Projektnummer vertrieben von lizenziert unter Apache 2.0.

Wichtigste Änderungen:

  • Methodenaufrufen wurde ein Cache hinzugefügt, um eine Überladungsauflösung zu vermeiden, wodurch die Auswirkungen der Methodenauflösung auf die Leistung erheblich verringert werden, insbesondere wenn dieselbe Überladung mehrmals aufgerufen wird, wie z. B. während der Schleifenausführung.
  • Je nach Datentyp wird die Übertragung von Listen, Tupeln und Puffern in Arrays von Java-Primitiven um das 4- bis 100-fache beschleunigt. Die Konvertierung nutzt die optimierte Verarbeitung von In-Memory-Puffer anstelle der Sequence API. Wenn ein Python-Puffer gefunden wird, wird nur das erste Element auf Konvertierung überprüft, da diese Puffer homogen sind.
  • Verarbeitung von Abschaltvorgängen (implementiert in JPype 1.0.0, wurde jedoch bei der Vorbereitung des Änderungsprotokolls übersprungen). JPype ruft nun die JVM-Shutdown-Routine auf, die versucht, ordnungsgemäß zu beenden. Dies führt zu mehreren Verhaltensänderungen. Nicht im Hintergrund laufende Threads (Proxy-Aufrufe) können die JVM jetzt geöffnet lassen, bis sie abgeschlossen sind. Proxy-Aufrufe verarbeiten das Herunterfahren, bis der Anruf abgeschlossen ist, erhalten jedoch eine Abbruchnachricht. Dateien werden jetzt ordnungsgemäß geschlossen und auf die Festplatte geschrieben, wenn die Threads die Ausnahme wie erwartet behandeln. Hooks und Finalizer für die Ressourcenbereinigung werden ausgeführt. Wenn Threads erzeugt werden, werden AtExit-Hooks aufgerufen. Durch den Daemon wird bei Verwendung der JVM von Python ein automatischer Thread-Anhang implementiert. Fehlerhafter Code, der die Thread-Bereinigung nicht ordnungsgemäß verarbeiten kann, bleibt wahrscheinlich hängen, wenn das Herunterfahren ausgeführt wird. Weitere Dokumentation finden Sie im Benutzerhandbuch.
  • Der Wrapper für Throwable erhielt anstelle des erwarteten Ergebnisses einen Wrapper für Object, was zu seltsamen Konvertierungen von Python-Klassen führte.
  • Tippfehler im Importsystem behoben, die zum Fehler „»jname» nicht gefunden“ führten.
  • Es wurde sichergestellt, dass „^C“ in KeyboardInterrupt korrekt heraufgestuft wurde.
  • Problem mit Symbolen seit Python 3.5.3 behoben. PySlice_Unpack wurde in einer nachfolgenden Patch-Version (3.5.4) eingeführt und hätte nicht verwendet werden dürfen.
  • Ein Fehler mit numpy.linalg.inv wurde behoben, der zu einem Absturz führte. Das Problem wurde auf die Thread-Kommunikation zwischen der JVM und einigen Numpy-Varianten zurückgeführt. Die vorgeschlagene Lösung besteht darin, numpy.linalg.inv vor dem Start der JVM aufzurufen.

Source: opennet.ru

Kommentar hinzufügen