Python使用RPC例子
主要內(nèi)容
所謂RPC,是遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call)的簡(jiǎn)寫(xiě),網(wǎng)上解釋很多,簡(jiǎn)單來(lái)說(shuō),就是在當(dāng)前進(jìn)程調(diào)用其他進(jìn)程的函數(shù)時(shí),體驗(yàn)就像是調(diào)用本地寫(xiě)的函數(shù)一般。
本文實(shí)現(xiàn)的是在本地調(diào)用遠(yuǎn)端的類class對(duì)象的接口,也就是本地的client不實(shí)例化類對(duì)象,調(diào)用的是server端的類對(duì)象接口。
為了達(dá)到讓調(diào)用層無(wú)須關(guān)心底層實(shí)現(xiàn),擁有絲滑般的體驗(yàn),就需要以下幾個(gè)部分:
- 客戶端需要把類的接口提取出來(lái),并將調(diào)用函數(shù)事件捕獲存儲(chǔ)起來(lái);服務(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ù)端通過(guò)某種方式(一般就是網(wǎng)絡(luò)socket)進(jìn)行通信。
遠(yuǎn)程過(guò)程調(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)文章
Python實(shí)現(xiàn)拷貝多個(gè)文件到同一目錄的方法
這篇文章主要介紹了Python實(shí)現(xiàn)拷貝多個(gè)文件到同一目錄的方法,涉及Python針對(duì)文件與目錄的遍歷、復(fù)制等相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
python def 定義函數(shù),調(diào)用函數(shù)方式
這篇文章主要介紹了python def 定義函數(shù),調(diào)用函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
OpenCV圖像縮放之cv.resize()函數(shù)詳解
resize函數(shù)opencv中專門(mén)用來(lái)調(diào)整圖像大小的函數(shù),下面這篇文章主要給大家介紹了關(guān)于OpenCV圖像縮放之cv.resize()函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
python神經(jīng)網(wǎng)絡(luò)之批量學(xué)習(xí)tf.train.batch函數(shù)示例
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)之批量學(xué)習(xí)tf.train.batch函數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python中pivot()函數(shù)基礎(chǔ)知識(shí)點(diǎn)
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python中pivot()函數(shù)基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,對(duì)此有興趣的朋友們可以參考學(xué)習(xí)下。2021-01-01
Python實(shí)現(xiàn)刪除列表中滿足一定條件的元素示例
這篇文章主要介紹了Python實(shí)現(xiàn)刪除列表中滿足一定條件的元素,結(jié)合具體實(shí)例形式對(duì)比分析了Python針對(duì)列表元素的遍歷、復(fù)制、刪除等相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
pandas實(shí)現(xiàn)to_sql將DataFrame保存到數(shù)據(jù)庫(kù)中
這篇文章主要介紹了pandas實(shí)現(xiàn)to_sql將DataFrame保存到數(shù)據(jù)庫(kù)中,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
PYTHON基礎(chǔ)-時(shí)間日期處理小結(jié)
PYTHON時(shí)間日期處理函數(shù)以datetime為中心, 起點(diǎn)或中轉(zhuǎn), 轉(zhuǎn)化為目標(biāo)對(duì)象, 涵蓋了大多數(shù)業(yè)務(wù)場(chǎng)景中需要的日期轉(zhuǎn)換處理,這里就為大家介紹一下,需要的朋友可以參考下2018-05-05

