溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何使用RPC

發布時間:2022-06-13 09:17:51 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

本篇內容介紹了“Python如何使用RPC”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

主要內容

所謂RPC,是遠程過程調用(Remote Procedure Call)的簡寫,網上解釋很多,簡單來說,就是在當前進程調用其他進程的函數時,體驗就像是調用本地寫的函數一般。

本文實現的是在本地調用遠端的類class對象的接口,也就是本地的client不實例化類對象,調用的是server端的類對象接口。

為了達到讓調用層無須關心底層實現,擁有絲滑般的體驗,就需要以下幾個部分:

  • 客戶端需要把類的接口提取出來,并將調用函數事件捕獲存儲起來;服務端需要把類的公有函數作為可遠程調用的接口。

  • 客戶端把調用函數的事件(調用的函數,參數)進行序列化并發送給服務端;服務端將客戶端的調用事件反序列化,并執行相應的接口,將返回值發送給客戶端。

  • 客戶端與服務端通過某種方式(一般就是網絡socket)進行通信。

遠程過程調用RPC常用與分布式計算,對應Python庫名為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)
 
    '''供客戶端調用的方法前得加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服務端,下段為rpyc調用端;

import rpyc
import time
from multiprocessing import Pool
 
def search_db(query,port):
    conn = rpyc.connect('localhost',port)
    '''調用時省略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()

“Python如何使用RPC”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女