Aktualizace JPype 1.0.2, knihovny pro přístup ke třídám Java z Pythonu

Dostupný uvolnění nové vrstvy JPype 1.0.2, který umožňuje organizovat plný přístup aplikací Pythonu ke knihovnám tříd Java. S JPype z Pythonu můžete použít knihovny specifické pro Java k vytváření hybridních aplikací, které kombinují kód Java a Python. Na rozdíl od Jythonu je integrace s Javou dosaženo nikoli vytvořením varianty Pythonu pro JVM, ale interakcí na úrovni obou virtuálních strojů využívajících sdílenou paměť. Navrhovaný přístup umožňuje nejen dosáhnout dobrého výkonu, ale také poskytuje přístup ke všem knihovnám CPython a Java. Kód projektu distribuovány licencováno pod Apache 2.0.

Hlavní změny:

  • Do volání metod byla přidána mezipaměť, aby se zabránilo řešení přetížení, což výrazně snížilo dopad rozlišení metod na výkon, zejména pokud je stejné přetížení voláno mnohokrát, jako ve smyčkách.
  • 4 až 100krát, v závislosti na typu dat, se zrychlí přenos seznamů, n-tic a vyrovnávacích pamětí do polí Java primitiv. Transformace používá optimalizované zpracování vyrovnávací paměti v paměti namísto Sequence API. Když se narazí na vyrovnávací paměť Pythonu, zkontroluje se konverze pouze u prvního prvku, protože tyto vyrovnávací paměti jsou homogenní.
  • Obsluha operací vypnutí (implementováno v JPype 1.0.0, ale vynecháno při přípravě changelogu). JPype nyní volá proceduru vypnutí JVM, která se pokusí elegantně ukončit. To má za následek několik změn chování. Vlákna bez pozadí (volání proxy) nyní mohou ponechat JVM otevřené, dokud nebudou ukončeny. Proxy volání budou zpracovávat vypnutí, dokud nebude volání dokončeno, ale obdrží zprávu o přerušení. Soubory jsou nyní správně uzavřeny a vyprázdněny na disk, pokud vlákna správně zpracují výjimku. Provedou se háky a finalizátory čištění zdrojů. Když jsou vlákna vytvořena, jsou volány háky AtExit. Prostřednictvím démona je při použití JVM z Pythonu implementováno automatické připojování vláken. Chybný kód, který nedokáže správně zpracovat čištění vláken, pravděpodobně při vypnutí přestane reagovat. Další dokumentace je v uživatelské příručce.
  • Obal pro Throwable získával obal pro Object namísto očekávaného výsledku, což vedlo k podivným převodům z tříd Pythonu.
  • Opraveny překlepy v importním systému, které vedly k chybě „jname“ nenalezeno.
  • Zajištěno správné povýšení "^C" v KeyboardInterrupt.
  • Opraven problém se znakem v Pythonu 3.5.3. PySlice_Unpack byl představen v následném vydání opravy (3.5.4) a neměl být používán.
  • Opraven pád s numpy.linalg.inv. Problém byl vysledován zpět k interakci vláken mezi JVM a některými variantami numpy. Navrhovaným řešením je zavolat před spuštěním JVM numpy.linalg.inv.

Zdroj: opennet.ru

Přidat komentář