The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

01.08.2020 02:33

Доступен новый выпуск прослойки 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.


  1. Главная ссылка к новости (https://github.com/jpype-proje...)
  2. OpenNews: Релиз JPype 1.0, библиотеки для доступа к Java-классам из Python
  3. OpenNews: Релиз JPype 0.7.2, библиотеки для доступа к Java-классам из Python
  4. OpenNews: Релиз JPype 0.7, библиотеки для доступа к Java-классам из Python
  5. OpenNews: Inlinec - новый способ использования Си-кода в Python-скриптах
  6. OpenNews: Гвидо ван Россум предложил включить в Python операторы для сопоставления с образцом
Автор новости: Аноним
Тип: Программы
Короткая ссылка: https://opennet.ru/53469-jpype
Ключевые слова: jpype, python, java
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (20) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (3), 10:41, 01/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чем это лучше py4j?
     
     
  • 2.4, Аноним (4), 10:46, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Тем, что в py4j требуется кооперация с разрабом либы дя внедрения в неё GatewayServer. Взаимодействие идёт по сети, что медленно.
     

  • 1.5, Аноним (5), 12:15, 01/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Как название библиотеки произносится по русски?
     
     
  • 2.6, Аноним (4), 13:12, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Хочешь форкнуть и внести в реестр "российского" ПО свой форк, но двойка по английскому не позволяет даже произнести название?
     
  • 2.7, trolleybus (?), 13:13, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Джейпайп, нет?
     
  • 2.9, Аноним (9), 13:31, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > по русски?

    Жипипка

     
  • 2.15, Аноним (15), 22:03, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Можешь читать как "жепупе", если хочешь.
     
  • 2.19, Karl Nelson (?), 00:16, 02/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Согласно "Google переводчик", "JPype" произносится Дж пэ пи. По-английски "JPype" рифмуется с пи-пи, как компромат.
     

  • 1.8, Аноним (9), 13:30, 01/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > доступа к Java-классам из Python

    И чего только не придумают, лишь бы на Си не писать.

     
     
  • 2.12, Аноним (4), 18:03, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В одном месте уже на си написали, такой говнокод получился ...

    struct pkginfo *pkg= (struct pkginfo*)argv[0]; // GPL-2.0+

    Почему то почти везде, где чистый Си - там лютый говнокод. Видимо потому, что пишут его те, кого в к энтерпрайзу бы на милю не подпустили. Исключение - ядро Linux. Но IMHO и оттуда надо чистый си выпилить. Хотя бы из-за идиотского неявного приведения типов для указатели на функции, на которое я дохрена времени потратил, выискивая, где у меня memory safety проблемы. Оказалось - в прототипе в хедерах один тип, а в функциях, которые присваиваются в указатели - другой. И компилятор молчит.

    В том же проекте: UB и утечки памяти.

    Не говоря уже о проблемах, которые можно огрести абсолютно на ровном месте, используя вместо enumов препроцессор, и вместо inline-функций тоже препроцессор, как си-макаки любят. Видимо из совместимости с C89.

     
     
  • 3.21, asdasd (?), 08:39, 03/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > где чистый Си - там лютый говнокод

    K&R C это чистый C? ANSI C чистый? C89 / 90 / 99 / 14 чистые? Про что вы говорите, это скорее всего какой-то старый код, потому он такой и есть.

    > В том же проекте: UB и утечки памяти.

    Кривые руки. Есть Valgrind, есть санитайзеры и есть статические анализаторы. C++ это тоже касается. Санитайзер с покрытием тестами находит все проблемы, если они и есть.

    > и вместо inline-функций тоже препроцессор, как си-макаки любят

    Макака которая это написала видимо даже Википедию не осилила, не говоря уже о стандарте. inline это РЕКОМЕНДАЦИЯ для компилятора, он может как ей последовать, так и забить болт. Плюс решаются проблемы линковки.

     
     
  • 4.22, Аноним (4), 10:49, 03/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >Макака которая это написала видимо даже Википедию не осилила, не говоря уже о стандарте. inline это РЕКОМЕНДАЦИЯ для компилятора, он может как ей последовать, так и забить болт.

    Так и должно быть. Если имеет смысл заинлайнить - значит заинлайнит. Если не имеет - значит будет функция. Если ты не доверяшь компилятору, то пиши на ассемблере. В специфических случаях, когда надо гарантировать инлайн, используйте аттрибуты. Компилятор не поддерживает аттрибуты? На *** такой компилятор. Единственный компилятор для архитектуры имеет только C89? На *** такую архитектуру, переходите на ARM чипы.

    >Плюс решаются проблемы линковки.

    Нет никаких проблем линковки.

    >Кривые руки. Есть Valgrind, есть санитайзеры и есть статические анализаторы. C++ это тоже касается. Санитайзер с покрытием тестами находит все проблемы, если они и есть.

    Ими и нашёл.

      

     
  • 3.24, ann (??), 20:44, 04/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Сказал бы сразу, что неосилятор. Вместо того позориться сходил бы книжку почитал умную.
     

  • 1.10, Аноним (10), 13:45, 01/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    и обратная библиотека Jep - запуск Python интерпретаторов в JVM:)
     
     
  • 2.14, Онаним (?), 20:57, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    PyJava же
     

  • 1.13, Аноним (13), 18:04, 01/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, jdbc через неё можно?
     
  • 1.16, Аноним (15), 22:08, 01/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Т.е. можно запустить javascript в java и интерпретировать его из python? Мне очень надо исполнять жс в питоне, но биндинги к симанки что-то тухлые и это не в8, приходилось дёргать ноду. Это всё очень медленно работает.
     
     
  • 2.17, Аноним (4), 23:40, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее всего вам лучше взять graalvm (node.js поверх truffle - в базовой комплектации) + graalpython, если graalpython имеет всё, что вам нужно.

    >биндинги к симанки что-то тухлые

    вы наверное имели в виду spidermonkey?

    как вариант - firefox + marionette + webdriver + selenium.

     
     
  • 3.18, Аноним (15), 23:47, 01/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Да, наверное, оно. Спасибо, посмотрю. От браузера в этой схеме как раз и хотелось бы избавиться.
     

  • 1.23, Явопитон (?), 17:58, 03/08/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Давно пора объеденить яву с питоном, присыпать .Нетом полить электроном и отправить всю эту жижу в нежилую галактику. А кто вспомнит их в нашей - рубить голову и запрещать размножаться.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру