欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用RPC例子

 更新時(shí)間:2022年06月12日 11:20:08   作者:伍迪艾倫學(xué)Python  
本文主要介紹了Python使用RPC例子,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

主要內(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)文章

最新評(píng)論