กลับไปหน้าบทความ

อ่าน 2 นาที

RPyC

RPyC (อ่านว่าอา ร์-พาย- ซี ) หรือ Remote Python Call คือ ไลบรารี Python สำหรับ การเรียกใช้ฟังก์ชันระยะไกล (RPC) และ การประมวลผลแบบกระจาย แตก ต่างจากกลไก RPC ทั่วไป เช่น ONC RPC ,...

RPyC

RPyC
นักพัฒนาโทเมอร์ ฟิลิบา
ปล่อย17 ธันวาคม พ.ศ. 2548
เวอร์ชันเสถียร
6.0.0 / 23 กุมภาพันธ์ 2024 [ 1 ] ( 23 กุมภาพันธ์ 2024 )
เขียนเป็นไพธอน
ระบบปฏิบัติการข้ามแพลตฟอร์ม
พิมพ์การเรียกใช้ขั้นตอนระยะไกล
ใบอนุญาตใบอนุญาต MIT
เว็บไซต์rpyc.readthedocs.org แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • github .com /tomerfilba-org /rpyc

RPyC (อ่านว่าอาร์-พาย- ซี ) หรือ Remote Python Call คือ ไลบรารี Pythonสำหรับการเรียกใช้ฟังก์ชันระยะไกล (RPC) และการประมวลผลแบบกระจาย แตก ต่างจากกลไก RPC ทั่วไป เช่นONC RPC , CORBAหรือJava RMI RPyC มีความโปร่งใส สมมาตร และไม่ต้องการภาษาตกแต่งหรือภาษานิยามพิเศษใดๆ ยิ่งไปกว่านั้น ยังช่วยให้สามารถเข้าถึงองค์ประกอบ Python ใดๆ ก็ได้ ไม่ว่าจะเป็นฟังก์ชัน คลาส อินสแตนซ์ หรือโมดูล ผ่านการเขียนโปรแกรม

คุณสมบัติ

  • สมมาตร—ไม่มีความแตกต่างระหว่างไคลเอนต์และเซิร์ฟเวอร์—ทั้งสองฝ่ายสามารถให้บริการได้ สิ่งเดียวที่แตกต่างคือโดยปกติแล้วไคลเอนต์จะเป็นฝ่ายเริ่มต้นการกระทำ ตัวอย่างเช่น การเป็นสมมาตรทำให้ไคลเอนต์สามารถส่งฟังก์ชันเรียกกลับ (callback function) ไปยังเซิร์ฟเวอร์ได้
  • โปร่งใส—วัตถุระยะไกลจะมีลักษณะและการทำงานเหมือนกับวัตถุในพื้นที่
  • ข้อยกเว้นจะแพร่กระจายเหมือนข้อยกเว้นเฉพาะที่
  • รองรับการทำงานทั้งแบบซิงโครนัสและอะซิงโครนัส:
    • การดำเนินการแบบซิงโครนัสจะส่งคืนNetProxy (ดูด้านล่าง)
    • การดำเนินการแบบอะซิงโครนัสจะส่งคืนค่า AsyncResult ซึ่งคล้ายกับอ็อบเจ็กต์Promise
    • AsyncResults สามารถใช้เป็นเหตุการณ์ได้
  • รองรับการใช้งานเธรด (แต่ไม่แนะนำให้ใช้)
  • สำหรับระบบ UNIX โดยเฉพาะ: การผสานรวมเซิร์ฟเวอร์กับinetd

สถาปัตยกรรม

RPyC ช่วยให้โปรแกรมเมอร์สามารถควบคุมตัวแปลภาษา Python ได้อย่างอิสระ โดยพื้นฐานแล้ว RPyC แตกต่างจาก RPC อื่นๆ ที่ต้องลงทะเบียนทรัพยากรก่อนจึงจะเข้าถึงได้ ด้วยเหตุนี้ การใช้ RPyC จึงง่ายกว่ามาก แต่ก็แลกมาด้วยความปลอดภัยที่ลดลง (คุณไม่สามารถจำกัดการเข้าถึงได้) RPyC มีจุดประสงค์เพื่อใช้ภายในเครือข่ายที่เชื่อถือได้ มีวิธีการต่างๆ รวมถึงVPN ที่สามารถใช้ เพื่อบรรลุเป้าหมายนี้ได้

เมื่อไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์แล้ว ไคลเอ็นต์จะสามารถดำเนินการระยะไกลได้สองวิธี:

  • คุณสมบัติ modules ที่แสดงเนมสเปซโมดูลของเซิร์ฟเวอร์: หรือ.doc = conn.modules.sys.pathconn.modules["xml.dom.minidom"].parseString("<some>xml</some>")
  • ฟังก์ชันexecuteคือฟังก์ชันที่ใช้ประมวลผลโค้ดที่กำหนดบนเซิร์ฟเวอร์:conn.execute("print 'hello world'")

การดำเนินการระยะไกลจะส่งคืนสิ่งที่เรียกว่าNetProxyซึ่งเป็นวัตถุตัวกลางที่สะท้อนการดำเนินการใดๆ ที่กระทำบนวัตถุนั้นไปยังวัตถุระยะไกล ตัวอย่างเช่น conn.modules.sys.path เป็น NetProxy สำหรับวัตถุ sys.path ของเซิร์ฟเวอร์ การเปลี่ยนแปลงใดๆ ที่ทำกับ conn.modules.sys.path บนวัตถุนั้นจะสะท้อนไปยังวัตถุระยะไกลทันที หมายเหตุ: NetProxy ไม่ได้ใช้สำหรับวัตถุพื้นฐานเช่น ตัวเลขและสตริง ซึ่งไม่สามารถเปลี่ยนแปลงได้

Asyncเป็นตัวห่อพร็อกซี หมายความว่า มันรับ NetProxy หนึ่งตัวและส่งคืนอีกตัวหนึ่งที่ห่อหุ้มด้วยฟังก์ชันการทำงานแบบอะซิงโครนัส การดำเนินการที่ทำกับ AsyncNetProxy จะส่งคืนค่าที่เรียกว่า AsyncResult อ็อบเจ็กต์เหล่านี้มีตัวบ่งชี้ '.is_ready' คุณสมบัติ '.result' ที่เก็บผลลัพธ์ (หรือบล็อกจนกว่าผลลัพธ์จะมาถึง) และฟังก์ชันเรียกกลับ '.on_ready' ซึ่งจะถูกเรียกเมื่อผลลัพธ์มาถึง

การใช้งาน

เดิมที RPyC ถูกพัฒนาขึ้นเพื่อจัดการการทดสอบแบบกระจายของผลิตภัณฑ์บนแพลตฟอร์มต่างๆ (ซึ่งทุกแพลตฟอร์มสามารถรัน Python ได้) อย่างไรก็ตาม RPyC ได้พัฒนาไปไกลกว่านั้น และปัจจุบันมีกรณีการใช้งานที่หลากหลายมากขึ้น ได้แก่:

  • การประมวลผลแบบกระจาย (การแบ่งภาระงานระหว่างเครื่องต่างๆ)
  • การทดสอบแบบกระจาย (การรันการทดสอบที่เชื่อมต่อหลายแพลตฟอร์มและแยกส่วนทรัพยากรฮาร์ดแวร์)
  • การบริหารจัดการจากระยะไกล (เช่น การปรับแต่งไฟล์การกำหนดค่าจากส่วนกลาง)
  • การสร้างอุโมงค์หรือการเชื่อมต่อแบบลูกโซ่ (การข้ามขอบเขตเครือข่ายที่กำหนดเส้นทางได้)

สาธิต

import rpycconn = rpyc.classic.connect ( "hostname" ) # สมมติ ว่ามี เซิร์ฟเวอร์แบบคลาส สิทำงานอยู่บน 'hostname'พิมพ์( conn . modules . sys . path ) conn . modules . sys . path . append ( "lucy" ) พิมพ์( conn . modules . sys . path [ - 1 ])# เวอร์ชันของ 'ls' ที่ทำงานจากระยะไกลdef remote_ls ( path ): ros = conn . modules . os for filename in ros . listdir ( path ): stats = ros . stat ( ros . path . join ( path , filename )) print ( " %d \t %d \t %s " % ( stats . st_size , stats . st_uid , filename ))remote_ls ( "/usr/bin" )# และข้อยกเว้น... ลอง: f = conn . builtin . open ( "/non/existent/file/name" ) ยกเว้นIOError : pass

ประวัติศาสตร์

RPyC อิงตามผลงานของEyal Lotem ( หรือที่รู้จักในชื่อLotex) ใน PyInvoke [ 2 ] ซึ่งไม่ได้มีการบำรุงรักษาอีกต่อไป เวอร์ชันแรกที่เผยแพร่สู่สาธารณะคือ 1.20 ซึ่งอนุญาตให้ใช้ RPC แบบสมมาตรและโปร่งใส แต่ไม่รองรับ การทำงาน แบบอะซิงโค รนัส เวอร์ชัน 1.6 แม้ว่าจะไม่เคยเผยแพร่สู่สาธารณะ แต่ได้เพิ่มแนวคิดของ 'เหตุการณ์' เป็นวิธีการสำหรับเซิร์ฟเวอร์ในการแจ้งให้ไคลเอนต์ทราบ เวอร์ชัน 2.X ซึ่งเวอร์ชันแรกที่เผยแพร่คือ 2.2 ได้เพิ่มการซิงโครไนซ์เธรดและ แนวคิด Asyncซึ่งสามารถใช้เป็นส่วนขยายของเหตุการณ์ได้ เวอร์ชัน 2.40 เพิ่ม เมธอด executeซึ่งสามารถใช้เพื่อเรียกใช้โค้ดที่ฝั่งตรงข้ามของการเชื่อมต่อโดยตรง RPyC 3 เป็นการเขียนไลบรารีใหม่ทั้งหมด โดยเพิ่ม โมเดลความปลอดภัยตาม ความสามารถบริการที่ชัดเจน และการปรับปรุงอื่นๆ อีกมากมาย

  • เว็บไซต์อย่างเป็นทางการ
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=RPyC&oldid=1360441400 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ RPyC

RPyC (อ่านว่าอา ร์-พาย- ซี ) หรือ Remote Python Call คือ ไลบรารี Python สำหรับ การเรียกใช้ฟังก์ชันระยะไกล (RPC) และ การประมวลผลแบบกระจาย แตก ต่างจากกลไก RPC ทั่วไป เช่น ONC RPC ,...

คุณสมบัติ

สมมาตร—ไม่มีความแตกต่างระหว่างไคลเอนต์และเซิร์ฟเวอร์—ทั้งสองฝ่ายสามารถให้บริการได้ สิ่งเดียวที่แตกต่างคือโดยปกติแล้วไคลเอนต์จะเป็นฝ่ายเริ่มต้นการกระทำ ตัวอย่างเช่น การเป็นสมมาตรทำให้ไคลเอนต์สามารถส่งฟังก์ชันเรียกกลับ (callback function) ไปยังเซิร์ฟเวอร์ได้...

สถาปัตยกรรม

RPyC ช่วยให้โปรแกรมเมอร์สามารถควบคุมตัวแปลภาษา Python ได้อย่างอิสระ โดยพื้นฐานแล้ว RPyC แตกต่างจาก RPC อื่นๆ ที่ต้องลงทะเบียนทรัพยากรก่อนจึงจะเข้าถึงได้ ด้วยเหตุนี้ การใช้ RPyC จึงง่ายกว่ามาก แต่ก็แลกมาด้วยความปลอดภัยที่ลดลง (คุณไม่สามารถจำกัดการเข้าถึงได้)...

การใช้งาน

เดิมที RPyC ถูกพัฒนาขึ้นเพื่อจัดการการทดสอบแบบกระจายของผลิตภัณฑ์บนแพลตฟอร์มต่างๆ (ซึ่งทุกแพลตฟอร์มสามารถรัน Python ได้) อย่างไรก็ตาม RPyC ได้พัฒนาไปไกลกว่านั้น และปัจจุบันมีกรณีการใช้งานที่หลากหลายมากขึ้น ได้แก่: