Абнаўленне 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.

Асноўныя змены:

  • У выклік метадаў дададзены кэш, які дазваляе пазбегнуць дазволу перагрузак, што значна памяншае ўплыў на прадукцыйнасць дазволу метадаў, асабліва калі адна і тая ж перагрузка выклікаецца шмат разоў, як падчас выканання цыклаў.
  • Ад 4 да 100 разоў, у залежнасці ад тыпу дадзеных, паскорана перадача спісаў, картэжаў і буфераў у масівы Java-прымітываў. Пераўтварэнне выкарыстоўвае аптымізаваную апрацоўку буфераў у памяці, замест 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

Дадаць каментар