Оновлення JPype 1.0.2, бібліотеки для доступу до Java-класів з Python

доступний новий випуск прошарку JPype 1.0.2, що дозволяє організувати повний доступ до програм Python до бібліотек класів на мові Java. За допомогою JPype з Python можна використовувати специфічні для Java бібліотеки, створюючи гібридні програми, що поєднують код Java і Python. На відміну від Jython, інтеграція з Java досягається не через створення варіанта Python для JVM, а через взаємодію на рівні обох віртуальних машин, використовуючи пам'ять, що розділяється. Запропонований підхід дозволяє не тільки досягти хорошої продуктивності, але й надає доступ до всіх бібліотек CPython та Java. Код проекту поширюється під ліцензією Apache 2.0

Основні зміни:

  • У виклик методів додано кеш, що дозволяє уникнути дозволу перевантажень, що значно зменшує вплив на продуктивність дозволу методів, особливо якщо те саме перевантаження викликається багато разів, як під час виконання циклів.
  • Від 4 до 100 разів, залежно від типу даних, прискорено передачу списків, кортежів та буферів до масивів Java-примітивів. Перетворення використовує оптимізовану обробку буферів у пам'яті замість Sequence API. Коли Python-буфер зустрічається, лише перший елемент перевіряється для перетворення, оскільки дані буфери однорідні.
  • Обробка операцій shutdown (реалізовано ще в JPype 1.0.0, але було пропущено під час підготовки списку змін). JPype тепер викликає shutdown-процедуру JVM, яка намагається виконати вихід у режимі "gracefully". Це призводить до кількох змін у поведінці. Чи не фонові нитки (proxy call) тепер можуть тримати JVM відкритим до тих пір, поки вони не будуть завершені. Виклики Proxy будуть обробляти shutdown, поки виклик не завершено, але отримають повідомлення про переривання. Файли тепер закриваються як слід і скидають дані на диск (flush), якщо нитки оброблять виняток потрібним чином. Виконуються хуки очищення ресурсів та фіналізатори. При породженні ниток викликаються AtExit-хуки. Через демон реалізовано автоматичне приєднання ниток під час використання JVM з Python. Помилковий код, який не може правильно обробити чищення нитки, ймовірно зависне при виконанні shutdown. Додаткова документація знаходиться у посібнику з використання.
  • Обгортка для Throwable отримувала обгортку для Object замість очікуваного результату, що призводило до дивних перетворень із Python-класів.
  • Виправлені помилки в системі імпорту, що призводять до виведення помилки 'jname' not found'.
  • Забезпечено коректне просування «^C» у KeyboardInterrupt.
  • Вирішено проблему із символами з Python 3.5.3. PySlice_Unpack був введений у наступному патч-релізі (3.5.4) і його не слід було використовувати.
  • Розібрано помилку з numpy.linalg.inv, що призводить до падіння. Проблема була відстежена до взаємодії потоків між JVM та деякими варіантами numpy. Пропоноване рішення – виклик numpy.linalg.inv до запуску JVM.

Джерело: opennet.ru

Додати коментар або відгук