亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

Python遠(yuǎn)程方法調(diào)用實(shí)現(xiàn)過程解析

瀏覽:79日期:2022-07-16 09:16:58

RPCHandler 和 RPCProxy 的基本思路是很比較簡單的。 如果一個(gè)客戶端想要調(diào)用一個(gè)遠(yuǎn)程函數(shù),比如 foo(1, 2, z=3) ,代理類創(chuàng)建一個(gè)包含了函數(shù)名和參數(shù)的元組 (‘foo’, (1, 2), {‘z’: 3}) 。 這個(gè)元組被pickle序列化后通過網(wǎng)絡(luò)連接發(fā)生出去。 這一步在 RPCProxy 的 getattr() 方法返回的 do_rpc() 閉包中完成。

服務(wù)器接收后通過pickle反序列化消息,查找函數(shù)名看看是否已經(jīng)注冊(cè)過,然后執(zhí)行相應(yīng)的函數(shù)。 執(zhí)行結(jié)果(或異常)被pickle序列化后返回發(fā)送給客戶端。實(shí)例需要依賴 multiprocessing 進(jìn)行通信。 不過,這種方式可以適用于其他任何消息系統(tǒng)。例如,如果你想在ZeroMQ之上實(shí)習(xí)RPC, 僅僅只需要將連接對(duì)象換成合適的ZeroMQ的socket對(duì)象即可。

先實(shí)現(xiàn)server端

import jsonfrom multiprocessing.connection import Listenerfrom threading import Threadclass RPCHandler: def __init__(self): self._functions = {} def register_function(self, func): self._functions[func.__name__] = func def handle_connection(self, connection): try: while True:func_name, args, kwargs = json.loads(connection.recv())# Run the RPC and send a responsetry: r = self._functions[func_name](*args, **kwargs) connection.send(json.dumps(r))except Exception as e: connection.send(json.dumps(e)) except EOFError: passdef rpc_server(handler, address, authkey): sock = Listener(address, authkey=authkey) while True: client = sock.accept() t = Thread(target=handler.handle_connection, args=(client,)) t.daemon = True t.start()# Some remote functionsdef add(x,y): return x+yif __name__ == ’__main__’: handler = RPCHandler() handler.register_function(add) # Run the server rpc_server(handler, (’127.0.0.1’, 17000), authkey=b’peekaboo’)

再實(shí)現(xiàn)client端

import jsonfrom multiprocessing.connection import Clientclass RPCProxy: def __init__(self, connection): self._connection = connection def __getattr__(self, name): def do_rpc(*args, **kwargs): self._connection.send(json.dumps((name, args, kwargs))) result = json.loads(self._connection.recv()) if isinstance(result, Exception):raise result return result return do_rpcif __name__ == ’__main__’: c = Client((’127.0.0.1’, 17000), authkey=b’peekaboo’) proxy = RPCProxy(c) res = proxy.add(2, 3) print(res)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 九九亚洲精品 | 天天五月天丁香婷婷深爱综合 | 国产三级在线观看 | 欧美专区视频 | 国产精品二区三区 | 国产精品yjizz视频网一二区 | 91亚洲欧美| 色综合a | 亚洲精品区 | 草久免费视频 | 亚洲高清视频网站 | 国产精品黄页网站在线播放免费 | 黄色成人免费观看 | 91久久国产 | 成人午夜在线播放 | 欧美中文字幕在线视频 | 欧美视频区 | 久久久久久久国产高清 | 在线观看亚洲成人 | 国产免费久久 | 欧美另类专区 | 美女被免费网站视频软件 | 久草网首页 | 欧美特黄一级aa毛片 | 欧美成人鲁丝片在线观看 | 成人毛片免费视频 | 久久综合久久自在自线精品自 | 无码精品一区二区三区免费视频 | 国产精品99久久99久久久看片 | 欧美一级特黄一片免费 | 亚洲韩精品欧美一区二区三区 | 手机看片久久青草福利盒子 | 69国产成人综合久久精品91 | 亚洲综合国产一区二区三区 | 精品欧美小视频在线观看 | 国产综合精品久久亚洲 | 神马三级我不卡 | 99精品久久久久久久免费看蜜月 | www.热| 露脸国产野战最新在线视频 | 国产精品亚洲欧美日韩区 |