ново издание наслоения , което позволява пълен достъп на Python приложения до класовите библиотеки на Java. С помощта на JPype от Python могат да се използват специфични за Java библиотеки, създавайки хибридни приложения, които комбинират код на Java и Python. За разлика от Jython, интеграцията с Java не става чрез създаване на вариант на Python за JVM, а чрез взаимодействие на нивото на двете виртуални машини, използвайки споделена памет. Предложенният подход не само, че осигурява добра производителност, но и предоставя достъп до всички библиотеки на CPython и Java. Код на проекта се разпространява под лицензия Apache 2.0.
Основни промени:
- В извикването на методи е добавен кеш, който позволява да се избегне разрешаването на презареждания, което значително намалява влиянието върху производителността на разрешаването на методи, особено ако едно и също презареждане се извиква много пъти, както по време на изпълнение на цикли.
- Предаването на списъци, кортежи и буфери в масиви от Java примитиви е ускорено от 4 до 100 пъти, в зависимост от типа на данните. Преобразуването използва оптимизирана обработка на буфери в паметта, вместо Sequence API. Когато Python буфер се срещне, само първият елемент се проверява за преобразуване, тъй като данните в буферите са хомогенни.
- Обработка на shutdown операции (реализирана вече в JPype 1.0.0, но пропусната при подготовката на списъка със смените). JPype сега извиква shutdown процедурата на JVM, която опитва да излезе в режим „gracefully“. Това води до някои промени в поведението. Не-фоновите нишки (proxy call) вече могат да задържат JVM отворена, докато не бъдат завършени. Proxy извикванията ще обработват shutdown, докато извикването не е завършено, но ще получат съобщение за прекъсване. Файловете сега се затварят както трябва и записват данни на диска (flush), ако нишките обработят изключение по правилния начин. Извършват се хукове за почистване на ресурси и финализатори. При създаването на нишки се извикват AtExit хукове. Чрез демона се реализира автоматично присъединяване на нишки при използването на JVM от Python. Грешен код, който не може правилно да обработи почистването на нишка, вероятно ще зацикли при извършване на shutdown. Допълнителна документация може да бъде намерена в ръководството за употреба.
- Обвивката за Throwable получаваше обвивка за Object вместо очаквания резултат, което водеше до странни преобразувания от Python класове.
- Поправени са печатни грешки в системата за импорт, водещи до извеждане на грешка ‘»jname» not found’.
- Осигурено е коректно предаване на „^C“ в KeyboardInterrupt.
- Проблемът с символите от Python 3.5.3 е отстранен. PySlice_Unpack беше въведен в последващия пач-релиз (3.5.4) и не трябваше да се използва.
- Разрешен е проблемът с numpy.linalg.inv, водещ до срива. Проблемът е проследен до взаимодействието на нишки между JVM и някои версии на numpy. Предложеното решение е извикване на numpy.linalg.inv преди стартиране на JVM.
Източник: opennet.ru
