Diweddariad JPype 1.0.2, llyfrgell ar gyfer cyrchu dosbarthiadau Java o Python

Ar gael rhyddhau newydd o interlayer JPype 1.0.2, sy'n caniatáu i gymwysiadau Python gael mynediad llawn i lyfrgelloedd dosbarth yn yr iaith Java. Gyda JPype o Python, gallwch ddefnyddio llyfrgelloedd penodol i Java i greu cymwysiadau hybrid sy'n cyfuno cod Java a Python. Yn wahanol i Jython, cyflawnir integreiddio â Java nid trwy greu amrywiad Python ar gyfer y JVM, ond trwy ryngweithio ar lefel y ddau beiriant rhithwir gan ddefnyddio cof a rennir. Mae'r dull arfaethedig yn caniatáu nid yn unig i gyflawni perfformiad da, ond hefyd yn darparu mynediad i holl lyfrgelloedd CPython a Java. Cod prosiect dosbarthu gan trwyddedig o dan Apache 2.0.

Newidiadau mawr:

  • Mae storfa wedi'i ychwanegu at alwadau dull i osgoi datrysiad gorlwytho, sy'n lleihau effaith perfformiad datrysiad dull yn fawr, yn enwedig os gelwir yr un gorlwytho lawer gwaith, ag yn ystod gweithredu dolen.
  • O 4 i 100 gwaith, yn dibynnu ar y math o ddata, mae trosglwyddo rhestrau, tuples a byfferau i araeau o gyntefig Java yn cael ei gyflymu. Mae'r trawsnewidiad yn defnyddio prosesu byfferau cof wedi'i optimeiddio, yn lle'r Sequence API. Pan ddeuir ar draws byffer Python, dim ond yr elfen gyntaf sy'n cael ei gwirio ar gyfer trosi, gan fod y byfferau hyn yn homogenaidd.
  • Prosesu gweithrediadau cau (a weithredwyd yn JPype 1.0.0, ond cafodd ei hepgor wrth baratoi'r changelog). Mae JPype bellach yn galw trefn cau JVM, sy'n ceisio gadael yn osgeiddig. Mae hyn yn arwain at nifer o newidiadau mewn ymddygiad. Gall edafedd di-gefndir (galwadau dirprwy) nawr gadw'r JVM ar agor nes eu bod wedi'u gorffen. Bydd galwadau dirprwy yn prosesu cau nes bod yr alwad wedi'i chwblhau, ond byddant yn derbyn neges erthylu. Mae ffeiliau bellach yn cael eu cau'n iawn a'u fflysio i ddisg os yw'r edafedd yn trin yr eithriad yn ôl y disgwyl. Mae bachau glanhau adnoddau a therfynwyr yn cael eu gweithredu. Pan fydd edafedd yn silio, gelwir bachau AtExit. Trwy'r ellyll, gweithredir uno edau awtomatig wrth ddefnyddio'r JVM o Python. Mae'n debygol y bydd cod bygi na all drin glanhau edau yn iawn yn hongian pan fydd y diffodd yn cael ei weithredu. Gellir dod o hyd i ddogfennaeth ychwanegol yn y llawlyfr defnyddiwr.
  • Derbyniodd y peiriant lapio ar gyfer Throwable lapiwr ar gyfer Gwrthrych yn lle'r canlyniad disgwyliedig, a arweiniodd at drawsnewidiadau rhyfedd o ddosbarthiadau Python.
  • Typos sefydlog yn y system fewnforio a arweiniodd at y gwall '"jname" heb ei ganfod'.
  • Wedi sicrhau bod "^C" yn cael ei hyrwyddo'n gywir yn KeyboardInterrupt.
  • Problem sefydlog gyda symbolau ers Python 3.5.3. Cyflwynwyd PySlice_Unpack mewn datganiad clwt dilynol (3.5.4) ac ni ddylai fod wedi'i ddefnyddio.
  • Wedi trwsio nam gyda numpy.linalg.inv a arweiniodd at ddamwain. Mae'r mater wedi'i olrhain i edau cyfathrebu rhwng y JVM a rhai blasau numpy. Yr ateb arfaethedig yw galw numpy.linalg.inv cyn dechrau'r JVM.

Ffynhonnell: opennet.ru

Ychwanegu sylw