Neue Version des Layers , das es ermöglicht, vollständigen Zugriff von Python-Anwendungen auf Klassenbibliotheken in Java zu organisieren. Mit JPype können spezifische Java-Bibliotheken aus Python verwendet werden, um hybride Anwendungen zu erstellen, die Code in Java und Python 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. Dieser Ansatz ermöglicht nicht nur eine gute Leistung, sondern bietet auch Zugang zu allen CPython- und Java-Bibliotheken. Der Code des Projekts unter der Apache 2.0-Lizenz.
Wesentliche Änderungen:
- Eine Cache-Funktion wurde zu den Methodenaufrufen hinzugefügt, die es ermöglicht, Überladungen zu vermeiden. Dies reduziert erheblich die Auswirkungen auf die Leistung bei der Auflösung von Methoden, insbesondere wenn dieselbe Überladung häufig während von Schleifen aufgerufen wird.
- Die Übertragung von Listen, Tupeln und Puffern in Java-Primitivarrays wurde um das 4- bis 100-Fache beschleunigt, abhängig vom Datentyp. Die Umwandlung verwendet eine optimierte Verarbeitung von Puffern im Speicher anstelle der Sequence API. Wenn ein Python-Puffer vorhanden ist, wird nur das erste Element zur Umwandlung überprüft, da die Datenpuffer homogen sind.
- Die Verarbeitung von Shutdown-Operationen (bereits in JPype 1.0.0 implementiert, aber bei der Erstellung der Änderungsübersicht übersehen). JPype ruft jetzt die Shutdown-Prozedur der JVM auf, die versucht, den Prozess "gracefully" zu beenden. Dies führt zu mehreren Änderungen im Verhalten. Nicht-Hintergrundthreads (Proxy-Aufruf) können nun die JVM offen halten, bis sie abgeschlossen sind. Proxy-Calls werden den Shutdown verarbeiten, solange der Aufruf nicht abgeschlossen ist, erhalten jedoch eine Interrupt-Nachricht. Dateien werden jetzt ordnungsgemäß geschlossen und Daten werden auf die Festplatte übertragen (flush), wenn die Threads die Ausnahmen richtig bearbeiten. Ressourcenreinigungs-Hooks und Finalisierer werden ausgeführt. Bei der Erzeugung von Threads werden AtExit-Hooks aufgerufen. Durch den Daemon wird eine automatische Thread-Anpassung bei Verwendung von JVM aus Python realisiert. Fehlercode, der die Thread-Reinigung nicht richtig verarbeiten kann, wird beim Shutdown wahrscheinlich hängen bleiben. Weitere Dokumentation finden Sie im Benutzerhandbuch.
- Der Wrapper für Throwable erhielt einen Wrapper für Object anstelle des erwarteten Ergebnisses, was zu seltsamen Umwandlungen von Python-Klassen führte.
- Rechtschreibfehler im Import-System behoben, die zu dem Fehler ‘»jname» nicht gefunden’ führten.
- Das richtige Weiterleiten von «^C» im KeyboardInterrupt wurde sichergestellt.
- Ein Problem mit Zeichen in Python 3.5.3 wurde behoben. PySlice_Unpack wurde im nachfolgenden Patch-Release (3.5.4) eingeführt und hätte nicht verwendet werden sollen.
- Ein Fehler mit numpy.linalg.inv, der zu einem Absturz führte, wurde behoben. Das Problem wurde auf die Interaktion zwischen Threads in 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
