JPype 1.0.2 atjauninājums, bibliotēkas, lai piekļūtu Java klasēm no Python

Pieejams jauns starpslāņa izlaidums JPype 1.0.2, kas ļauj Python lietojumprogrammām pilnībā piekļūt klašu bibliotēkām Java valodā. Izmantojot Python JPype, varat izmantot Java specifiskas bibliotēkas, lai izveidotu hibrīda lietojumprogrammas, kas apvieno Java un Python kodu. Atšķirībā no Jython, integrācija ar Java tiek panākta, nevis izveidojot Python variantu JVM, bet gan mijiedarbojoties abu virtuālo mašīnu līmenī, izmantojot koplietojamo atmiņu. Piedāvātā pieeja ļauj ne tikai sasniegt labu veiktspēju, bet arī nodrošina piekļuvi visām CPython un Java bibliotēkām. Projekta kods izplata licencēts saskaņā ar Apache 2.0.

Galvenās izmaiņas:

  • Metožu izsaukumiem ir pievienota kešatmiņa, lai izvairītos no pārslodzes izšķirtspējas, kas ievērojami samazina metodes izšķirtspējas veiktspēju, it īpaši, ja viena un tā pati pārslodze tiek izsaukta daudzas reizes, piemēram, cilpas izpildes laikā.
  • No 4 līdz 100 reizēm atkarībā no datu veida tiek paātrināta sarakstu, korešu un buferu pārsūtīšana uz Java primitīvu masīviem. Reklāmguvumā tiek izmantota optimizēta atmiņā esošo buferu apstrāde, nevis Sequence API. Kad tiek konstatēts Python buferis, pārveidošanai tiek pārbaudīts tikai pirmais elements, jo šie buferi ir viendabīgi.
  • Izslēgšanas darbību apstrāde (ieviesta JPype 1.0.0, bet tika izlaista, sagatavojot izmaiņu žurnālu). JPype tagad izsauc JVM izslēgšanas rutīnu, kas mēģina graciozi iziet. Tas noved pie vairākām izmaiņām uzvedībā. Nefona pavedieni (starpniekservera izsaukumi) tagad var paturēt JVM atvērtu, līdz tie ir pabeigti. Starpniekservera zvani apstrādās izslēgšanu, līdz zvans tiks pabeigts, taču saņems pārtraukšanas ziņojumu. Faili tagad ir pareizi aizvērti un izskaloti diskā, ja pavedieni apstrādā izņēmumu, kā paredzēts. Tiek izpildīti resursu tīrīšanas āķi un pabeigtāji. Kad pavedieni ir radušies, tiek izsaukti AtExit āķi. Izmantojot dēmonu, tiek ieviesta automātiska pavedienu savienošana, izmantojot Python JVM. Kļūdains kods, kas nevar pareizi apstrādāt pavedienu tīrīšanu, visticamāk, tiks uzkarināts, kad tiks veikta izslēgšana. Papildu dokumentāciju var atrast lietotāja rokasgrāmatā.
  • Throwable iesaiņojums gaidītā rezultāta vietā saņēma Object iesaiņojumu, kas noveda pie dīvainiem pārveidojumiem no Python klasēm.
  • Izlabotas importēšanas sistēmas drukas kļūdas, kuru rezultātā tika parādīta kļūda "»jname» nav atrasts".
  • Nodrošināts, lai funkcijā KeyboardInterrupt "^C" tiktu reklamēts pareizi.
  • Novērsta problēma ar simboliem kopš Python 3.5.3. PySlice_Unpack tika ieviests nākamajā ielāpu laidienā (3.5.4), un to nevajadzēja izmantot.
  • Novērsta kļūda vietnē numpy.linalg.inv, kas izraisīja avāriju. Problēma tika izsekota saistībā ar saziņu starp JVM un dažām neparastām garšām. Piedāvātais risinājums ir pirms JVM palaišanas piezvanīt numpy.linalg.inv.

Avots: opennet.ru

Pievieno komentāru