JPype 1.0.2 ažuriranje, biblioteke za pristup Java klasama iz Pythona

Dostupno novo izdanje međusloja JPype 1.0.2, što omogućava Python aplikacijama da imaju pun pristup bibliotekama klasa na jeziku Java. Uz JPype iz Pythona, možete koristiti biblioteke specifične za Javu za kreiranje hibridnih aplikacija koje kombinuju Java i Python kod. Za razliku od Jythona, integracija sa Javom se ne postiže kreiranjem Python varijante za JVM, već interakcijom na nivou obje virtuelne mašine koristeći zajedničku memoriju. Predloženi pristup omogućava ne samo postizanje dobrih performansi, već i omogućava pristup svim CPython i Java bibliotekama. Šifra projekta distribuira licenciran pod Apache 2.0.

Glavne promjene:

  • Keš je dodat pozivima metoda kako bi se izbjeglo rješavanje preopterećenja, što uvelike smanjuje učinak rezolucije metode, posebno ako se isto preopterećenje poziva mnogo puta, kao tokom izvršavanja petlje.
  • Od 4 do 100 puta, ovisno o tipu podataka, ubrzava se prijenos lista, tuple-a i bafera u nizove Java primitiva. Konverzija koristi optimiziranu obradu memorijskih bafera, umjesto Sequence API-ja. Kada se naiđe na Python bafer, samo prvi element se provjerava za konverziju, pošto su ti baferi homogeni.
  • Obrada operacija isključivanja (implementirana u JPype 1.0.0, ali je preskočena prilikom pripreme dnevnika promjena). JPype sada poziva rutinu isključivanja JVM-a, koja pokušava elegantno izaći. To dovodi do nekoliko promjena u ponašanju. Ne-pozadinske niti (proxy pozivi) sada mogu držati JVM otvoren dok se ne završe. Proxy pozivi će obraditi gašenje dok se poziv ne završi, ali će primiti poruku o prekidu. Datoteke su sada ispravno zatvorene i isprane na disk ako niti obrađuju izuzetak kako je očekivano. Izvršavaju se kuke za čišćenje resursa i finalizatori. Kada se pokrenu niti, AtExit kuke se pozivaju. Preko demona se implementira automatsko pričvršćivanje niti kada se koristi JVM iz Pythona. Buggy kod koji ne može pravilno upravljati čišćenjem niti će vjerovatno visjeti kada se izvrši isključivanje. Dodatnu dokumentaciju možete pronaći u korisničkom priručniku.
  • Omot za Throwable je dobio omotač za Object umjesto očekivanog rezultata, što je dovelo do čudnih konverzija iz Python klasa.
  • Ispravljene greške u kucanju u sistemu uvoza koje su rezultirale greškom '»jname» nije pronađeno'.
  • Osigurao da je "^C" ispravno promoviran u KeyboardInterruptu.
  • Riješen problem sa simbolima od Python 3.5.3. PySlice_Unpack je uveden u naknadnom izdanju zakrpe (3.5.4) i nije se trebao koristiti.
  • Ispravljena greška sa numpy.linalg.inv koja je dovela do pada. Problem je ušao u komunikaciju niti između JVM-a i nekih numpy okusa. Predloženo rješenje je da pozovete numpy.linalg.inv prije pokretanja JVM-a.

izvor: opennet.ru

Dodajte komentar