Aggiornamento JPype 1.0.2, una libreria per accedere alle classi Java da Python

A disposizione nuova versione di intercalare JPype 1.0.2, che consente alle applicazioni Python di avere pieno accesso alle librerie di classi nel linguaggio Java. Con JPype di Python, puoi utilizzare librerie specifiche di Java per creare applicazioni ibride che combinano codice Java e Python. A differenza di Jython, l'integrazione con Java si ottiene non creando una variante Python per la JVM, ma attraverso l'interazione a livello di entrambe le macchine virtuali utilizzando la memoria condivisa. L'approccio proposto consente non solo di ottenere buone prestazioni, ma fornisce anche l'accesso a tutte le librerie CPython e Java. Codice del progetto distribuito da concesso in licenza con Apache 2.0.

Principali modifiche:

  • È stata aggiunta una cache alle chiamate ai metodi per evitare la risoluzione dell'overload, riducendo notevolmente l'impatto sulle prestazioni della risoluzione del metodo, soprattutto se lo stesso sovraccarico viene chiamato più volte, come durante l'esecuzione del ciclo.
  • Da 4 a 100 volte, a seconda del tipo di dati, viene accelerato il trasferimento di liste, tuple e buffer su array di primitive Java. La conversione utilizza l'elaborazione ottimizzata dei buffer in memoria, anziché l'API Sequence. Quando viene incontrato un buffer Python, viene controllata la conversione solo del primo elemento, poiché questi buffer sono omogenei.
  • Elaborazione delle operazioni di arresto (implementata in JPype 1.0.0, ma saltata durante la preparazione del registro delle modifiche). JPype ora richiama la routine di shutdown della JVM, che tenta di uscire senza problemi. Ciò porta a diversi cambiamenti nel comportamento. I thread non in background (chiamate proxy) ora possono mantenere aperta la JVM fino al termine. Le chiamate proxy elaboreranno l'arresto fino al completamento della chiamata, ma riceveranno un messaggio di interruzione. I file ora vengono chiusi correttamente e scaricati su disco se i thread gestiscono l'eccezione come previsto. Vengono eseguiti hook e finalizzatori di pulizia delle risorse. Quando i thread vengono generati, vengono chiamati gli hook AtExit. Attraverso il demone, viene implementato il collegamento automatico del thread quando si utilizza la JVM da Python. Il codice difettoso che non è in grado di gestire correttamente la pulizia del thread probabilmente si bloccherà quando viene eseguito lo spegnimento. Ulteriore documentazione è reperibile nel manuale utente.
  • Il wrapper per Throwable ha ricevuto un wrapper per Object invece del risultato atteso, il che ha portato a strane conversioni dalle classi Python.
  • Risolti errori di battitura nel sistema di importazione che causavano l'errore '»jname» non trovato'.
  • Assicurati che "^C" sia stato promosso correttamente in KeyboardInterrupt.
  • Risolto problema con i simboli a partire da Python 3.5.3. PySlice_Unpack è stato introdotto in una patch successiva (3.5.4) e non avrebbe dovuto essere utilizzato.
  • Risolto un bug con numpy.linalg.inv che portava a un arresto anomalo. Il problema è stato ricondotto al thread di comunicazione tra la JVM e alcuni sapori Numpy. La soluzione proposta è chiamare numpy.linalg.inv prima di avviare la JVM.

Fonte: opennet.ru

Aggiungi un commento