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

Dostupné nové vydání vrstvy JPype 1.0.2, která umožňuje plný přístup Python aplikací k Java knihovnám tříd. Pomocí JPype je možné využívat specifické Java knihovny z Pythonu a vytvářet hybridní aplikace kombinující kód v Java a Python. Na rozdíl od Jythonu, integrace s Java je dosažena nikoli vytvořením varianty Pythonu pro JVM, ale interakcí na úrovni obou virtuálních strojů s využitím sdílené paměti. Tento přístup nejenže poskytuje dobrou výkonnost, ale také umožňuje přístup ke všem knihovnám CPython a Java. Kód projektu distribuováno pod licencí Apache 2.0.

Hlavní změny:

  • Do volání metod byl přidán cache, který umožňuje vyhnout se rozlišení přetížení, což výrazně snižuje dopad na výkon rozlišení metod, zejména pokud je stejné přetížení voláno mnohokrát, například během běhu smyček.
  • Přenášení seznamů, n-tic a bufferů do polí Java primitivů bylo urychleno od 4 do 100krát, v závislosti na typu dat. Transformace používá optimalizované zpracování bufferů v paměti, namísto API Sequence. Když se narazí na buffer Pythonu, kontroluje se pouze první prvek pro transformaci, protože data v bufferech jsou homogenní.
  • Zpracování operací shutdown (realizováno již v JPype 1.0.0, ale bylo opomenuto při přípravě seznamu změn). JPype nyní volá shutdown proceduru JVM, která se snaží provést odchod v režimu „gracefully“. To vede k několika změnám v chování. Nezávislé vlákna (proxy call) mohou nyní udržovat JVM otevřenou, dokud nebudou dokončena. Volání Proxy zpracovávají shutdown, dokud není volání dokončeno, ale obdrží zprávu o přerušení. Soubory se nyní správně zavírají a data se zapisují na disk (flush), pokud vlákna zpracovávají výjimku potřebným způsobem. Provádějí se úklidové háčky a finalizátory. Při vzniku vláken se vyvolávají háčky AtExit. Přes démon bylo implementováno automatické připojení vláken při používání JVM z Pythonu. Chybový kód, který nedokáže správně zpracovat úklid vlákna, pravděpodobně zamrzne při provádění shutdown. Další dokumentace je v uživatelské příručce.
  • Závěrka pro Throwable dostávala závěrku pro Object místo očekávaného výsledku, což vedlo k podivným transformacím z Python tříd.
  • Opraveny překlepy v systému importu, které vedly k vyhodnocení chyby „»jname» not found“.
  • Bylo zajištěno správné posunutí „^C“ v KeyboardInterrupt.
  • Vyřešen problém se znaky s Python 3.5.3. PySlice_Unpack byl zaveden v následující aktualizaci (3.5.4) a neměl být používán.
  • Byla rozebrána chyba s numpy.linalg.inv, která vedla k pádu. Problém byl sledován k interakci vláken mezi JVM a některými variantami numpy. Navrhované řešení — zavolat numpy.linalg.inv před spuštěním JVM.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster