Actualización de JPype 1.0.2, bibliotecas para acceder a clases de Java desde Python

Dispoñible liberación de nova capa JPype 1.0.2, que lle permite organizar o acceso total das aplicacións Python ás bibliotecas de clases Java. Con JPype de Python, pode usar bibliotecas específicas de Java para crear aplicacións híbridas que combinen código Java e Python. A diferenza de Jython, a integración con Java conséguese non mediante a creación dunha variante de Python para a JVM, senón mediante a interacción a nivel de ambas máquinas virtuais mediante a memoria compartida. O enfoque proposto permite non só acadar un bo rendemento, senón que tamén proporciona acceso a todas as bibliotecas CPython e Java. Código do proxecto distribuído por licenciado baixo Apache 2.0.

Principais cambios:

  • Engadiuse unha caché ás chamadas de métodos para evitar a resolución de sobrecarga, reducindo moito o impacto no rendemento da resolución de métodos, especialmente se a mesma sobrecarga se chama moitas veces, como nos bucles.
  • De 4 a 100 veces, dependendo do tipo de datos, a transferencia de listas, tuplas e búfers a matrices de primitivas Java é acelerada. A transformación utiliza un manexo optimizado do búfer na memoria en lugar da API Sequence. Cando se atopa un búfer de Python, só se verifica a conversión do primeiro elemento, xa que estes búfers son homoxéneos.
  • Xestionar operacións de apagado (implementado en JPype 1.0.0, pero omitido ao preparar o rexistro de cambios). JPype agora chama ao procedemento de apagado da JVM, que tenta saír con gracia. Isto dá lugar a varios cambios de comportamento. Os fíos que non sexan de segundo plano (chamadas de proxy) agora poden manter a JVM aberta ata que finalicen. As chamadas de proxy procesarán o peche ata que se complete, pero recibirán unha mensaxe de aborto. Os ficheiros agora pechanse correctamente e líganse ao disco se os fíos xestionan a excepción correctamente. Exécutanse os ganchos de limpeza de recursos e os finalizadores. Cando se xeran fíos, chámanse os ganchos AtExit. A través do daemon, a conexión automática de fíos implícase cando se usa a JVM de Python. É probable que o código erróneo que non poida xestionar correctamente a limpeza dos fíos se bloquee ao apagar. A documentación adicional está no manual de usuario.
  • O envoltorio de Throwable estaba recibindo un envoltorio para Object en lugar do resultado esperado, o que levaba a estrañas conversións das clases de Python.
  • Corrixíronse erros tipográficos no sistema de importación que orixinaban un erro "non se atopaba jname".
  • Asegurouse a correcta promoción de "^C" en KeyboardInterrupt.
  • Solucionouse un problema de carácter con Python 3.5.3. PySlice_Unpack foi introducido nunha versión de parche posterior (3.5.4) e non debería terse usado.
  • Corrixiuse un fallo con numpy.linalg.inv. O problema remontouse á interacción de fío entre a JVM e algunhas variantes de numpy. A solución suxerida é chamar a numpy.linalg.inv antes de iniciar a JVM.

Fonte: opennet.ru

Engadir un comentario