python专属的Remote Produce Call框架:rpyc
Posted zhangphil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python专属的Remote Produce Call框架:rpyc相关的知识,希望对你有一定的参考价值。
python专属的Remote Produce Call框架:rpyc
python生态里面的rpc框架很多,比较出名的有grpc和thrift,但是这两个框架在python体系里面用起来相对比较复杂,下面介绍一个极其简洁轻量级的纯python实现的RPC框架:rpyc。
rpyc开源地址github:
(1)安装。
pip install rpyc
(2)编写RPC服务器端。
import sys
import time
import rpyc
from rpyc.utils.server import ThreadedServer
class MyRPCServer(rpyc.Service):
def on_connect(self, conn):
print(sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time())
def on_disconnect(self, conn):
print(sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time())
def exposed_hello(self):
print(sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time())
return 'hello,world'
def exposed_sum(self, a: int, b: int):
print(a, b, sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time())
return a + b
exposed_constant_value = False
if __name__ == "__main__":
t = ThreadedServer(MyRPCServer, port=9999)
print('RPC服务器启动...')
t.start()
print(sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time())
(3)写一个简单RPC客户端。
import rpyc
if __name__ == "__main__":
conn = rpyc.connect(host="127.0.0.1", port=9999)
print(conn.root)
print(conn.root.constant_value)
print(conn.root.hello())
print(conn.root.sum(1, 2))
(4)启动。
首先启动服务器端,然后启动客户端,依次启动后,RPC服务器端输出:
RPC服务器启动...
on_connect 10 1663145525.0500057
exposed_hello 16 1663145525.0519998
1 2 exposed_sum 20 1663145525.0530686
on_disconnect 13 1663145525.0571816
客户端输出:
<__main__.MyRPCServer object at 0x000001D789B98EE0>
False
hello,world
3
(5)总结。
rpyc框架体系中,服务器端定义的对外暴露的公开访问接口通过在方法前面加上 exposed_ 作为标识。在RPC服务器端定义的服务类,凡是以 exposed_ 开头的,均是客户端可以远程调用的接口,包括一些基础变量值。这很不同grpc的模式,grpc模式需要先定义RPC方法函数类文件。在rpyc不需要额外定义一个单独的文件,直接通过在代码文件中用exposed_标识即可,相当灵活简洁。
rpyc支持linux和Windows系统。
以上是关于python专属的Remote Produce Call框架:rpyc的主要内容,如果未能解决你的问题,请参考以下文章
python-kafka实现produce与consumer
C语言 回调函数 produce(arr,len,getRand)