Python 官方文档:入门教程 => 点击学习
本篇内容介绍了“python如何使用rpc”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!主要内容所谓RPC,是远程过程调用(Remote P
本篇内容介绍了“python如何使用rpc”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
所谓RPC,是远程过程调用(Remote Procedure Call)的简写,网上解释很多,简单来说,就是在当前进程调用其他进程的函数时,体验就像是调用本地写的函数一般。
本文实现的是在本地调用远端的类class对象的接口,也就是本地的client不实例化类对象,调用的是server端的类对象接口。
为了达到让调用层无须关心底层实现,拥有丝滑般的体验,就需要以下几个部分:
客户端需要把类的接口提取出来,并将调用函数事件捕获存储起来;服务端需要把类的公有函数作为可远程调用的接口。
客户端把调用函数的事件(调用的函数,参数)进行序列化并发送给服务端;服务端将客户端的调用事件反序列化,并执行相应的接口,将返回值发送给客户端。
from multiprocessing import Poolfrom 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()
import rpycimport timefrom 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”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
--结束END--
本文标题: Python如何使用RPC
本文链接: https://lsjlt.com/news/340742.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0