Python使用RPC例子
主要內(nèi)容
所謂RPC,是遠(yuǎn)程過程調(diào)用(Remote Procedure Call)的簡(jiǎn)寫,網(wǎng)上解釋很多,簡(jiǎn)單來說,就是在當(dāng)前進(jìn)程調(diào)用其他進(jìn)程的函數(shù)時(shí),體驗(yàn)就像是調(diào)用本地寫的函數(shù)一般。
本文實(shí)現(xiàn)的是在本地調(diào)用遠(yuǎn)端的類class對(duì)象的接口,也就是本地的client不實(shí)例化類對(duì)象,調(diào)用的是server端的類對(duì)象接口。
為了達(dá)到讓調(diào)用層無須關(guān)心底層實(shí)現(xiàn),擁有絲滑般的體驗(yàn),就需要以下幾個(gè)部分:
- 客戶端需要把類的接口提取出來,并將調(diào)用函數(shù)事件捕獲存儲(chǔ)起來;服務(wù)端需要把類的公有函數(shù)作為可遠(yuǎn)程調(diào)用的接口。
- 客戶端把調(diào)用函數(shù)的事件(調(diào)用的函數(shù),參數(shù))進(jìn)行序列化并發(fā)送給服務(wù)端;服務(wù)端將客戶端的調(diào)用事件反序列化,并執(zhí)行相應(yīng)的接口,將返回值發(fā)送給客戶端。
- 客戶端與服務(wù)端通過某種方式(一般就是網(wǎng)絡(luò)socket)進(jìn)行通信。
遠(yuǎn)程過程調(diào)用RPC常用與分布式計(jì)算,對(duì)應(yīng)Python庫(kù)名為rpyc;
from multiprocessing import Pool from rpyc import Service from rpyc.utils.server import ThreadedServer class RemoteService(Service): def on_connect(self, conn): print(conn) '''供客戶端調(diào)用的方法前得加exposed_''' def exposed_search(self, data): print(data) data['result'] = 'ok' return data def main(port): sr = ThreadedServer(service=RemoteService, hostname='127.0.0.1', port=port, auto_register=False) print(f'Server IP: {(sr.host,sr.port)}') sr.start() if __name__ == '__main__': pool = Pool(processes=2) pool.apply_async(main, args=(9998,)) pool.apply_async(main, kwds={'port':9999}) pool.close() pool.join()
上段為rpyc服務(wù)端,下段為rpyc調(diào)用端;
import rpyc import time from multiprocessing import Pool def search_db(query,port): conn = rpyc.connect('localhost',port) '''調(diào)用時(shí)省略exposed_''' result = conn.root.search(query) time.sleep(1) print(result) conn.close() if __name__ == '__main__': pool = Pool(processes=2) pool.apply_async(search_db, args=({"match": {'name': 'user'}}, 9998)) pool.apply_async(search_db, kwds={'query': {"match": {'name': 'user'}},'port':9999}) pool.close() pool.join()
到此這篇關(guān)于Python使用RPC例子的文章就介紹到這了,更多相關(guān)Python使用RPC內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
centos+nginx+uwsgi部署django項(xiàng)目上線
本文主要介紹了centos+nginx+uwsgi部署django項(xiàng)目上線,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07如何用Python對(duì)數(shù)學(xué)函數(shù)進(jìn)行求值、求偏導(dǎo)
這篇文章主要介紹了如何用Python對(duì)數(shù)學(xué)函數(shù)進(jìn)行求值、求偏導(dǎo)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05python自動(dòng)統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼
這篇文章主要介紹了python自動(dòng)統(tǒng)計(jì)zabbix系統(tǒng)監(jiān)控覆蓋率的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Python中創(chuàng)建字典的幾種方法總結(jié)(推薦)
下面小編就為大家?guī)硪黄狿ython中創(chuàng)建字典的幾種方法總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04python開發(fā)中range()函數(shù)用法實(shí)例分析
這篇文章主要介紹了python開發(fā)中range()函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了Python中range()函數(shù)遍歷列表的相關(guān)技巧,需要的朋友可以參考下2015-11-11