ການປັບປຸງ JPype 1.0.2, ຫ້ອງສະຫມຸດສໍາລັບການເຂົ້າເຖິງຫ້ອງຮຽນ Java ຈາກ Python

ມີໃຫ້ новый выпуск прослойки JPype 1.0.2, ເຊິ່ງອະນຸຍາດໃຫ້ທ່ານສາມາດຈັດລະບຽບການເຂົ້າເຖິງຢ່າງເຕັມທີ່ຂອງຄໍາຮ້ອງສະຫມັກ Python ກັບຫ້ອງສະຫມຸດຫ້ອງຮຽນ Java. ດ້ວຍ JPype ຈາກ Python, ທ່ານສາມາດນໍາໃຊ້ຫ້ອງສະຫມຸດສະເພາະ Java ເພື່ອສ້າງຄໍາຮ້ອງສະຫມັກປະສົມທີ່ປະສົມປະສານລະຫັດ Java ແລະ Python. ບໍ່ເຫມືອນກັບ Jython, ການເຊື່ອມໂຍງກັບ Java ແມ່ນບັນລຸບໍ່ໄດ້ໂດຍຜ່ານການສ້າງຕົວແປ Python ສໍາລັບ JVM, ແຕ່ໂດຍຜ່ານການໂຕ້ຕອບໃນລະດັບຂອງທັງສອງເຄື່ອງ virtual ໂດຍໃຊ້ຫນ່ວຍຄວາມຈໍາຮ່ວມກັນ. ວິທີການທີ່ສະເຫນີອະນຸຍາດໃຫ້ບໍ່ພຽງແຕ່ບັນລຸການປະຕິບັດທີ່ດີ, ແຕ່ຍັງໃຫ້ການເຂົ້າເຖິງຫ້ອງສະຫມຸດ 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

ເພີ່ມຄວາມຄິດເຫັນ