Aktualizacja JPype 1.0.2, biblioteki do dostępu do klas Java z Pythona

Dostępny nowa wersja warstwy JPype 1.0.2, umożliwiająca pełny dostęp aplikacji Python do bibliotek klas w języku Java. Dzięki JPype z Pythona można korzystać z bibliotek specyficznych dla Javy, tworząc hybrydowe aplikacje łączące kod w Javie z Pythonem. W przeciwieństwie do Jython, integracja z Javą osiągana jest nie poprzez stworzenie wersji Pythona dla JVM, lecz poprzez interakcję na poziomie obu maszyn wirtualnych, wykorzystując pamięć współdzieloną. Proponowane podejście pozwala nie tylko osiągnąć dobrą wydajność, ale także zapewnia dostęp do wszystkich bibliotek CPython i Javy. Kod projektu rozpowszechniany na licencji Apache 2.0.

Główne zmiany:

  • Dodano cache do wywołań metod, co pozwala uniknąć rozwiązywania przeciążeniowych, co znacznie zmniejsza wpływ na wydajność rozwiązywania metod, szczególnie gdy to samo przeciążenie jest wywoływane wiele razy, jak podczas wykonywania pętli.
  • Przekazywanie list, krotek i buforów do tablic prostych typów Java przyspieszone od 4 do 100 razy, w zależności od typu danych. Konwersja wykorzystuje zoptymalizowane przetwarzanie buforów w pamięci, zamiast API Sequences. Gdy napotkany jest bufor Pythona, tylko pierwszy element jest sprawdzany do konwersji, ponieważ dane bufory są jednorodne.
  • Obsługa operacji zamykania (wdrożona już w JPype 1.0.0, ale pominięta przy przygotowywaniu listy zmian). JPype teraz wywołuje procedurę shutdown JVM, która próbuje zakończyć proces w trybie „gracefully”. Prowadzi to do kilku zmian w zachowaniu. Brak wątków roboczych (proxy call) może teraz trzymać JVM otwartym, dopóki nie zakończą działania. Wywołania Proxy będą obsługiwać zamykanie, dopóki wywołanie nie zostanie zakończone, ale otrzymają komunikat o przerwaniu. Pliki są teraz zamykane poprawnie i dane są zapisywane na dysku (flush), jeśli wątki obsłużą wyjątek w odpowiedni sposób. Wykonywane są haki czyszczące zasoby i finalizatory. Przy tworzeniu wątków wywoływane są haki AtExit. Poprzez demona wprowadzone automatyczne dołączenie wątków podczas używania JVM z Pythona. Błędny kod, który nie może poprawnie obsłużyć czyszczenia wątku, prawdopodobnie zawiesi się podczas wykonywania shutdown. Dodatkowa dokumentacja znajduje się w przewodniku użytkownika.
  • Opakowanie dla Throwable uzyskało opakowanie dla Object zamiast oczekiwanego wyniku, co prowadziło do dziwnego przekształcania z klas Pythona.
  • Poprawiono literówki w systemie importu, co prowadziło do wyświetlenia błędu '»jname» not found'.
  • Zapewniono poprawne propagowanie ' ^C ' w KeyboardInterrupt.
  • Usunięto problem z symbolami z Python 3.5.3. PySlice_Unpack został wprowadzony w następnym wydaniu niewielkiej aktualizacji (3.5.4) i nie powinien być używany.
  • Rozwiązano problem z numpy.linalg.inv, prowadzący do awarii. Problem został zidentyfikowany jako interakcja wątków między JVM a niektórymi wersjami numpy. Zachęcamy do wywoływania numpy.linalg.inv przed uruchomieniem JVM.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster