อัปเดต JPype 1.0.2 ซึ่งเป็นไลบรารีสำหรับการเข้าถึงคลาส Java จาก Python

มีอยู่ interlayer รุ่นใหม่ เจพีพ์ 1.0.2ซึ่งช่วยให้แอปพลิเคชัน Python สามารถเข้าถึงไลบรารีคลาสในภาษา Java ได้อย่างสมบูรณ์ ด้วย JPype จาก Python คุณสามารถใช้ไลบรารีเฉพาะ Java เพื่อสร้างแอปพลิเคชันไฮบริดที่รวมโค้ด Java และ Python ต่างจาก Jython ตรงที่การรวมเข้ากับ Java ไม่ได้เกิดขึ้นจากการสร้างตัวแปร Python สำหรับ JVM แต่ผ่านการโต้ตอบที่ระดับของเครื่องเสมือนทั้งสองเครื่องโดยใช้หน่วยความจำที่ใช้ร่วมกัน แนวทางที่นำเสนอไม่เพียงแต่ช่วยให้บรรลุประสิทธิภาพที่ดีเท่านั้น แต่ยังให้การเข้าถึงไลบรารี CPython และ Java ทั้งหมดอีกด้วย รหัสโครงการ จัดจำหน่ายโดย ได้รับอนุญาตภายใต้ Apache 2.0

การเปลี่ยนแปลงที่สำคัญ:

  • มีการเพิ่มแคชในการเรียกเมธอดเพื่อหลีกเลี่ยงการแก้ปัญหาการโอเวอร์โหลด ซึ่งจะช่วยลดผลกระทบต่อประสิทธิภาพการทำงานของการแก้ไขเมธอดได้อย่างมาก โดยเฉพาะอย่างยิ่งหากมีการเรียกใช้โอเวอร์โหลดเดียวกันหลายครั้ง เช่น ในระหว่างการประมวลผลลูป
  • ตั้งแต่ 4 ถึง 100 ครั้ง ขึ้นอยู่กับประเภทข้อมูล การถ่ายโอนรายการ สิ่งอันดับ และบัฟเฟอร์ไปยังอาร์เรย์ของ Java primitives จะถูกเร่งให้เร็วขึ้น การแปลงใช้การประมวลผลบัฟเฟอร์ในหน่วยความจำที่ปรับให้เหมาะสม แทน Sequence API เมื่อพบบัฟเฟอร์ Python จะมีการตรวจสอบเฉพาะองค์ประกอบแรกสำหรับการแปลง เนื่องจากบัฟเฟอร์เหล่านี้เป็นเนื้อเดียวกัน
  • กำลังดำเนินการปิดระบบ (ใช้งานใน JPype 1.0.0 แต่ถูกข้ามไปเมื่อเตรียมบันทึกการเปลี่ยนแปลง) ตอนนี้ JPype เรียกรูทีนการปิดระบบ JVM ซึ่งพยายามออกอย่างสง่างาม สิ่งนี้นำไปสู่การเปลี่ยนแปลงพฤติกรรมหลายประการ เธรดที่ไม่ใช่พื้นหลัง (การเรียกพร็อกซี) สามารถเปิด JVM ไว้ได้จนกว่าจะเสร็จสิ้น การโทรผ่านพร็อกซีจะดำเนินการปิดเครื่องจนกว่าการโทรจะเสร็จสิ้น แต่จะได้รับข้อความยกเลิก ขณะนี้ไฟล์ถูกปิดอย่างถูกต้องและถูกล้างลงดิสก์หากเธรดจัดการข้อยกเว้นตามที่คาดไว้ hook การล้างข้อมูลทรัพยากรและผู้สรุปผลจะถูกดำเนินการ เมื่อเธรดถูกวางไข่ AtExit hooks จะถูกเรียก ผ่าน daemon การแนบเธรดอัตโนมัติจะถูกนำมาใช้เมื่อใช้ JVM จาก Python รหัส Buggy ที่ไม่สามารถจัดการการล้างเธรดได้อย่างถูกต้องมีแนวโน้มที่จะหยุดทำงานเมื่อมีการดำเนินการปิดเครื่อง สามารถดูเอกสารเพิ่มเติมได้ในคู่มือผู้ใช้
  • wrapper สำหรับ Throwable ได้รับ wrapper สำหรับ Object แทนที่จะเป็นผลลัพธ์ที่คาดหวัง ซึ่งนำไปสู่การแปลงที่แปลกจากคลาส Python
  • แก้ไขการพิมพ์ผิดในระบบนำเข้าซึ่งส่งผลให้เกิดข้อผิดพลาด '»jname» not found'
  • ตรวจสอบให้แน่ใจว่า "^C" ได้รับการเลื่อนระดับอย่างถูกต้องใน KeyboardInterrupt
  • แก้ไขปัญหาเกี่ยวกับสัญลักษณ์ตั้งแต่ Python 3.5.3 PySlice_Unpack เปิดตัวในการเปิดตัวแพตช์ถัดไป (3.5.4) และไม่ควรใช้
  • แก้ไขข้อบกพร่องด้วย numpy.linalg.inv ที่ทำให้เกิดข้อขัดข้อง ปัญหาได้รับการตรวจสอบจากการสื่อสารแบบเธรดระหว่าง JVM และรสชาติที่เข้มข้นบางอย่าง โซลูชันที่นำเสนอคือการเรียก numpy.linalg.inv ก่อนที่จะเริ่ม JVM

ที่มา: opennet.ru

เพิ่มความคิดเห็น