Актуализация на JPype 1.0.2, библиотека за достъп до Java класове от Python

Достъпен ново издание наслоя JPype 1.0.2, което позволява на Python приложенията да имат пълен достъп до библиотеките от класове на Java. С JPype от Python можете да използвате специфични за Java библиотеки, създавайки хибридни приложения, които съчетават код на Java и Python. За разлика от Jython, интеграцията с Java не се извършва чрез създаване на вариант на Python за JVM, а чрез взаимодействие на ниво и на двете виртуални машини, използвайки споделена памет. Предложеният подход позволява не само добра производителност, но и достъп до всички библиотеки CPython и Java. Кодът на проекта разпространява е под лицензия Apache 2.0.

Основни промени:

  • Добавен кеш при извикване на методи, който позволи да се избегне разрeшението на презарежданията, което значително намалява влиянието върху производителността при извикване на един и същ презареждане многократно, особено при изпълнение на цикли.
  • Предаването на списъци, кортежи и буфери в масиви от 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster