Actualizarea JPype 1.0.2, bibliotecă pentru accesul la clase Java din Python

Disponibil noua versiune a interfeței JPype 1.0.2, permițând acces complet pentru aplicațiile Python la bibliotecile de clase în limbajul Java. Cu ajutorul JPype, din Python se pot utiliza biblioteci specifice Java, creând aplicații hibride ce combină codul Java cu cel Python. Spre deosebire de Jython, integrarea cu Java nu se realizează prin crearea unei variante de Python pentru JVM, ci prin interacțiunea la nivelul ambelor mașini virtuale, utilizând memorie partajată. Aproach-ul propus nu doar că asigură o performanță bună, ci oferă și acces la toate bibliotecile CPython și Java. Codul proiectului se răspândește sub licența Apache 2.0.

Modificări principale:

  • Un cache a fost adăugat în apelul metodelor, ceea ce permite evitarea unei rezolvări repetate a suprasarcinilor, reducând semnificativ impactul asupra performanței în identificarea metodelor, mai ales când aceeași suprasarcină este apelată de mai multe ori, cum ar fi în timpul execuției în bucle.
  • Transferul listelor, tuplurilor și bufferelor în array-uri de tipuri primitive Java a fost accelerat de 4 până la 100 de ori, în funcție de tipul de date. Conversia folosește procesarea optimizată a bufferelor în memorie, în loc de API-ul Sequence. Când întâlnește un buffer Python, numai primul element este verificat pentru conversie, deoarece aceste date sunt omogene.
  • Gestionarea operațiunilor de shutdown (realizată încă în JPype 1.0.0, dar omisă în lista de modificări). JPype acum apelează procedura de shutdown a JVM, care încearcă să efectueze ieșirea în mod «gracefully». Acest lucru duce la mai multe schimbări în comportament. Firele de fundal (proxy call) nu mai pot menține JVM-ul deschis până când nu sunt finalizate. Apelurile Proxy vor gestiona shutdown până la terminarea apelului, dar vor primi un mesaj de întrerupere. Fișierele se închid corect și datele sunt descărcate pe disc (flush), dacă firele gestionează excepția corespunzător. Se execută hook-uri de curățare a resurselor și finalizatori. La generarea firelor sunt apelate hook-uri AtExit. Prin daemon este implementată asocierea automată a firelor atunci când se folosește JVM din Python. Codul eronat, care nu poate gestiona corect curățarea firului, va rămâne probabil blocat la efectuarea shutdown-ului. Documentația suplimentară se găsește în manualul de utilizare.
  • Împachetarea pentru Throwable a primit un împachetaj pentru Object în locul rezultatului așteptat, ceea ce a dus la conversii ciudate între clasele Python.
  • Erorile de tipar din sistemul de import au fost corectate, ceea ce ducea la afișarea mesajului de eroare ‘»jname» not found’.
  • S-a asigurat promovarea corectă a «^C» în KeyboardInterrupt.
  • Problema cu caracterele din Python 3.5.3 a fost rezolvată. PySlice_Unpack a fost introdus în versiunea de patch-uri ulterioare (3.5.4) și nu ar fi trebuit folosit.
  • A fost rezolvată o eroare cu numpy.linalg.inv, care ducea la crăpare. Problema a fost urmărită la interacțiunile firelor între JVM și anumite variante de numpy. Soluția propusă este apelarea numpy.linalg.inv înainte de a porni JVM.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster