Atualização JPype 1.0.2, uma biblioteca para acessar classes Java do Python

Disponível nova versão do intercalar JPype 1.0.2, que permite que aplicativos Python tenham acesso total às bibliotecas de classes na linguagem Java. Com o JPype do Python, você pode usar bibliotecas específicas do Java para criar aplicativos híbridos que combinam código Java e Python. Ao contrário do Jython, a integração com Java não é alcançada através da criação de uma variante Python para a JVM, mas através da interação no nível de ambas as máquinas virtuais usando memória compartilhada. A abordagem proposta permite não apenas obter um bom desempenho, mas também fornece acesso a todas as bibliotecas CPython e Java. Código do projeto distribuído por licenciado sob Apache 2.0.

Grandes mudanças:

  • Um cache foi adicionado às chamadas de método para evitar a resolução de sobrecarga, o que reduz bastante o impacto no desempenho da resolução do método, especialmente se a mesma sobrecarga for chamada muitas vezes, como durante a execução do loop.
  • De 4 a 100 vezes, dependendo do tipo de dados, a transferência de listas, tuplas e buffers para arrays de primitivos Java é acelerada. A conversão usa processamento otimizado de buffers na memória, em vez da API Sequence. Quando um buffer Python é encontrado, apenas o primeiro elemento é verificado para conversão, pois esses buffers são homogêneos.
  • Processamento de operações de desligamento (implementado no JPype 1.0.0, mas foi ignorado na preparação do changelog). O JPype agora chama a rotina de encerramento da JVM, que tenta sair normalmente. Isso leva a diversas mudanças de comportamento. Threads que não são em segundo plano (chamadas de proxy) agora podem manter a JVM aberta até serem concluídas. As chamadas proxy processarão o desligamento até que a chamada seja concluída, mas receberão uma mensagem de cancelamento. Os arquivos agora serão fechados corretamente e descarregados no disco se os threads tratarem a exceção conforme o esperado. Ganchos e finalizadores de limpeza de recursos são executados. Quando os threads são gerados, os ganchos AtExit são chamados. Através do daemon, o anexo automático de thread é implementado ao usar a JVM do Python. Código com erros que não consegue lidar adequadamente com a limpeza de thread provavelmente travará quando o desligamento for executado. Documentação adicional pode ser encontrada no manual do usuário.
  • O wrapper para Throwable recebeu um wrapper para Object em vez do resultado esperado, o que levou a conversões estranhas de classes Python.
  • Corrigidos erros de digitação no sistema de importação que resultavam no erro '»jname» não encontrado'.
  • Garantiu que "^C" foi promovido corretamente em KeyboardInterrupt.
  • Corrigido problema com símbolos desde Python 3.5.3. PySlice_Unpack foi introduzido em uma versão de patch subsequente (3.5.4) e não deveria ter sido usado.
  • Corrigido um bug com numpy.linalg.inv que causava um travamento. O problema foi atribuído à comunicação de thread entre a JVM e alguns tipos numpy. A solução proposta é chamar numpy.linalg.inv antes de iniciar a JVM.

Fonte: opennet.ru

Adicionar um comentário