Mise à jour JPype 1.0.2, une bibliothèque pour accéder aux classes Java depuis Python

Disponible nouvelle version de l'intercalaire JPype 1.0.2, qui permet aux applications Python d'avoir un accès complet aux bibliothèques de classes du langage Java. Avec JPype de Python, vous pouvez utiliser des bibliothèques spécifiques à Java pour créer des applications hybrides combinant le code Java et Python. Contrairement à Jython, l'intégration avec Java se fait non pas par la création d'une variante Python pour la JVM, mais par l'interaction au niveau des deux machines virtuelles utilisant la mémoire partagée. L'approche proposée permet non seulement d'obtenir de bonnes performances, mais donne également accès à toutes les bibliothèques CPython et Java. Code de projet distribué par sous licence Apache 2.0.

Les principaux changements:

  • Un cache a été ajouté aux appels de méthode pour éviter la résolution de surcharge, ce qui réduit considérablement l'impact sur les performances de la résolution de méthode, en particulier si la même surcharge est appelée plusieurs fois, comme lors de l'exécution d'une boucle.
  • De 4 à 100 fois, selon le type de données, le transfert des listes, tuples et tampons vers des tableaux de primitives Java est accéléré. La conversion utilise un traitement optimisé des tampons en mémoire, au lieu de l'API Sequence. Lorsqu'un tampon Python est rencontré, seul le premier élément est vérifié pour la conversion, car ces tampons sont homogènes.
  • Traitement des opérations d'arrêt (implémentées dans JPype 1.0.0, mais ignorées lors de la préparation du journal des modifications). JPype appelle désormais la routine d'arrêt de la JVM, qui tente de se terminer correctement. Cela entraîne plusieurs changements de comportement. Les threads hors arrière-plan (appels proxy) peuvent désormais garder la JVM ouverte jusqu'à ce qu'ils soient terminés. Les appels proxy procéderont à l'arrêt jusqu'à la fin de l'appel, mais recevront un message d'abandon. Les fichiers sont désormais fermés correctement et vidés sur le disque si les threads gèrent l'exception comme prévu. Les hooks et finaliseurs de nettoyage des ressources sont exécutés. Lorsque les threads sont générés, les hooks AtExit sont appelés. Grâce au démon, l'attachement automatique des threads est implémenté lors de l'utilisation de la JVM de Python. Le code bogué qui ne peut pas gérer correctement le nettoyage des threads se bloquera probablement lors de l'exécution de l'arrêt. Une documentation supplémentaire peut être trouvée dans le manuel d'utilisation.
  • Le wrapper pour Throwable a reçu un wrapper pour Object au lieu du résultat attendu, ce qui a conduit à d'étranges conversions des classes Python.
  • Correction de fautes de frappe dans le système d'importation qui entraînaient l'erreur « »jname » introuvable ».
  • Nous nous sommes assurés que "^C" était correctement promu dans KeyboardInterrupt.
  • Correction d'un problème avec les symboles depuis Python 3.5.3. PySlice_Unpack a été introduit dans une version ultérieure du correctif (3.5.4) et n'aurait pas dû être utilisé.
  • Correction d'un bug avec numpy.linalg.inv qui entraînait un crash. Le problème a été attribué à la communication des threads entre la JVM et certaines versions de numpy. La solution proposée consiste à appeler numpy.linalg.inv avant de démarrer la JVM.

Source: opennet.ru

Ajouter un commentaire