อ่าน 2 นาที
RPyC
RPyC (อ่านว่าอา ร์-พาย- ซี ) หรือ Remote Python Call คือ ไลบรารี Python สำหรับ การเรียกใช้ฟังก์ชันระยะไกล (RPC) และ การประมวลผลแบบกระจาย แตก ต่างจากกลไก RPC ทั่วไป เช่น ONC RPC ,...
RPyC
| RPyC | |
|---|---|
![]() | |
| นักพัฒนา | โทเมอร์ ฟิลิบา |
| ปล่อย | 17 ธันวาคม พ.ศ. 2548 |
| เวอร์ชันเสถียร | |
| เขียนเป็น | ไพธอน |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| พิมพ์ | การเรียกใช้ขั้นตอนระยะไกล |
| ใบอนุญาต | ใบอนุญาต MIT |
| เว็บไซต์ | rpyc.readthedocs.org |
| ที่เก็บข้อมูล |
|
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 เป็นการเขียนไลบรารีใหม่ทั้งหมด โดยเพิ่ม โมเดลความปลอดภัยตาม ความสามารถบริการที่ชัดเจน และการปรับปรุงอื่นๆ อีกมากมาย
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ RPyC
RPyC (อ่านว่าอา ร์-พาย- ซี ) หรือ Remote Python Call คือ ไลบรารี Python สำหรับ การเรียกใช้ฟังก์ชันระยะไกล (RPC) และ การประมวลผลแบบกระจาย แตก ต่างจากกลไก RPC ทั่วไป เช่น ONC RPC ,...
คุณสมบัติ
สมมาตร—ไม่มีความแตกต่างระหว่างไคลเอนต์และเซิร์ฟเวอร์—ทั้งสองฝ่ายสามารถให้บริการได้ สิ่งเดียวที่แตกต่างคือโดยปกติแล้วไคลเอนต์จะเป็นฝ่ายเริ่มต้นการกระทำ ตัวอย่างเช่น การเป็นสมมาตรทำให้ไคลเอนต์สามารถส่งฟังก์ชันเรียกกลับ (callback function) ไปยังเซิร์ฟเวอร์ได้...
สถาปัตยกรรม
RPyC ช่วยให้โปรแกรมเมอร์สามารถควบคุมตัวแปลภาษา Python ได้อย่างอิสระ โดยพื้นฐานแล้ว RPyC แตกต่างจาก RPC อื่นๆ ที่ต้องลงทะเบียนทรัพยากรก่อนจึงจะเข้าถึงได้ ด้วยเหตุนี้ การใช้ RPyC จึงง่ายกว่ามาก แต่ก็แลกมาด้วยความปลอดภัยที่ลดลง (คุณไม่สามารถจำกัดการเข้าถึงได้)...
การใช้งาน
เดิมที RPyC ถูกพัฒนาขึ้นเพื่อจัดการการทดสอบแบบกระจายของผลิตภัณฑ์บนแพลตฟอร์มต่างๆ (ซึ่งทุกแพลตฟอร์มสามารถรัน Python ได้) อย่างไรก็ตาม RPyC ได้พัฒนาไปไกลกว่านั้น และปัจจุบันมีกรณีการใช้งานที่หลากหลายมากขึ้น ได้แก่:
