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:

GitHub - tomerfiliba-org/rpyc: RPyC (Remote Python Call) - A transparent and symmetric RPC library for pythonRPyC (Remote Python Call) - A transparent and symmetric RPC library for python - GitHub - tomerfiliba-org/rpyc: RPyC (Remote Python Call) - A transparent and symmetric RPC library for pythonhttps://github.com/tomerfiliba-org/rpyc

(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)

Vim 粉专属T恤来了!

520专属Python代码(Python遇到520)

专属定制:用Python简洁的二十行代码做一个专属你的动漫词云图

止步于磁盘空间不足