国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(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)文章:
主站蜘蛛池模板: 日本无卡码一区二区三区 | 99在线观看视频免费精品9 | 性盈盈影院影院67194 | 在线观看亚洲网站 | 国产网站91 | 国产丝袜美女一区二区三区 | 盈盈性影院 | 欧美一级大尺度毛片 | 亚洲视频在线视频 | 日韩欧美国产视频 | 亚洲天堂网站在线 | 国产视频在线免费观看 | 成人日韩在线观看 | 91精品手机国产露脸 | 中文字幕亚洲国产 | 亚洲精品自产拍在线观看 | 国产三级黄色 | 特黄日韩免费一区二区三区 | 中文字幕欧美在线观看 | 国产伦理久久精品久久久久 | 韩国19禁主播裸免费福利 | 黄在线观看在线播放720p | 草草影院ccyycom | 神马午夜不卡 | 亚洲欧美日本综合一区二区三区 | 国产精品反差婊在线观看 | 欧洲免费无线码二区5 | 日韩性大片免费 | 成年人免费黄色 | 99亚洲视频 | 三级手机在线观看 | 国产精品成人免费视频不卡 | 久久精品免费观看国产软件 | 中文国产成人精品久久久 | 最近手机中文字幕1 | 欧美国产日本精品一区二区三区 | 日本aaaa级片 | 国产亚洲欧美一区二区 | 免费区欧美一级毛片精品 | 亚洲国产成人九九综合 | 国产精品国产自线在线观看 |