Posodobitev JPype 1.0.2, knjižnica za dostop do razredov Java iz Pythona

Na voljo nova izdaja vmesnega sloja JPype 1.0.2, ki aplikacijam Python omogoča popoln dostop do knjižnic razredov v jeziku Java. Z JPype iz Pythona lahko uporabite knjižnice, specifične za Javo, za ustvarjanje hibridnih aplikacij, ki združujejo kodo Jave in Python. Za razliko od Jythona integracija z Javo ni dosežena z ustvarjanjem različice Python za JVM, temveč z interakcijo na ravni obeh virtualnih strojev, ki uporabljata skupni pomnilnik. Predlagani pristop omogoča ne le doseganje dobre zmogljivosti, temveč tudi dostop do vseh knjižnic CPython in Java. Koda projekta distributer licenciran pod Apache 2.0.

Večje spremembe:

  • Klicem metode je bil dodan predpomnilnik, da bi se izognili razrešitvi preobremenitve, kar močno zmanjša vpliv razrešitve metode na zmogljivost, zlasti če se ista preobremenitev kliče večkrat, na primer med izvajanjem zanke.
  • Od 4- do 100-krat, odvisno od vrste podatkov, se pospeši prenos seznamov, tupl in vmesnih pomnilnikov v nize primitivov Java. Pretvorba namesto API-ja Sequence uporablja optimizirano obdelavo vmesnih pomnilnikov v pomnilniku. Ko se pojavi vmesni pomnilnik Python, se za pretvorbo preveri le prvi element, saj so ti medpomnilniki homogeni.
  • Obdelava operacij zaustavitve (implementirano v JPype 1.0.0, vendar je bilo preskočeno pri pripravi dnevnika sprememb). JPype zdaj pokliče rutino zaustavitve JVM, ki se poskuša elegantno zapreti. To vodi do številnih sprememb v vedenju. Niti, ki niso v ozadju (klici posrednika), lahko zdaj ohranijo JVM odprt, dokler niso končane. Klici posrednika bodo procesirali zaustavitev, dokler klic ni končan, vendar bodo prejeli sporočilo o prekinitvi. Datoteke so zdaj pravilno zaprte in odplaknjene na disk, če niti obravnavajo izjemo, kot je pričakovano. Izvajajo se kavlji za čiščenje virov in finalizatorji. Ko se ustvarijo niti, se kličejo kljuke AtExit. Preko demona je pri uporabi JVM iz Pythona implementirano samodejno združevanje niti. Koda z napakami, ki ne more pravilno obdelati čiščenja niti, bo verjetno obvisela, ko se izvede zaustavitev. Dodatno dokumentacijo najdete v uporabniškem priročniku.
  • Ovoj za Throwable je namesto pričakovanega rezultata prejel ovoj za Object, kar je vodilo do čudnih pretvorb iz razredov Python.
  • Popravljene tipkarske napake v uvoznem sistemu, ki so povzročale napako »»jname» ni bilo mogoče najti«.
  • Zagotovil, da je bil »^C« pravilno napredovan v KeyboardInterrupt.
  • Odpravljena težava s simboli od Pythona 3.5.3. PySlice_Unpack je bil predstavljen v naslednji izdaji popravka (3.5.4) in ga ne bi smeli uporabiti.
  • Odpravljena je napaka z numpy.linalg.inv, ki je povzročila zrušitev. Težava je bila odkrita v komunikaciji niti med JVM in nekaterimi različicami numpy. Predlagana rešitev je, da pred zagonom JVM pokličete numpy.linalg.inv.

Vir: opennet.ru

Dodaj komentar