GRPC(三)python调用go语言gRPC客户端和服务器

目录

  1. gRPC用的protobuf配置与介绍
  2. go语言 gRPC服务器与客户端
  3. python gRPC服务器与客户端

编译python用的protobuf

Python 调用gRPC,也需要编译对应的proto文件,编译前需要安装必备的模块

# 安装模块
pip install grpcio
# 安装编译工具
pip install grpcio-tools
# 在pb文件夹命令行运行,编译出.py文件
python.exe -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. grpc.proto

得到文件:grpc_pb2_grpc.py、grpc_pb2.py 把文件移动到python目录下,新建python文件client.pyserver.py

python gRPC客户端

client.py

import grpc
import grpc_pb2
import grpc_pb2_grpc

def run():
    # 连接 rpc 服务器
    conn = grpc.insecure_channel('localhost:10086')
    # 调用 rpc 服务
    client = grpc_pb2_grpc.GRPCStub(conn)
    req = client.Ping(grpc_pb2.ping(msg='from python client'))
    print("python client received: " + req.msg)

if __name__ == '__main__':
    run()

完成客户端后,就可以用已经写好的go语言grpc服务器做测试,理论上已经可以跨语言调用了。

  • go语言服务端:go run main.go
    在这里插入图片描述
  • python客户端:python client.py
    在这里插入图片描述

测试通过! go语言和python已经连起来了!! 接下来编写python服务端,go语言来调用

Python gRPC服务

server.py

from concurrent import futures
import grpc
import grpc_pb2
import grpc_pb2_grpc

# 实现 proto 文件中定义的 GRPCServicer
class RpcServer(grpc_pb2_grpc.GRPCServicer):
    # 实现 proto 文件中定义的 rpc 调用
    def Ping(self, request, context):
        print(request.msg)
        return grpc_pb2.pong(msg = 'reply from python')


def serve():
    # 启动 rpc 服务
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    grpc_pb2_grpc.add_GRPCServicer_to_server(RpcServer(), server)
    server.add_insecure_port('[::]:10086')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()

运行测试:

  • python服务:python server.py
    在这里插入图片描述
  • go客户端:go run main.go
    在这里插入图片描述
  • python客户端:python client.py
    在这里插入图片描述
    可以看到,python的客户端和go的客户端都可以远程调用python的服务端,实验成功~

猜你喜欢

转载自blog.csdn.net/xuehu96/article/details/122814752