2021-02-26 Python GRPC

2021-02-26  本文已影响0人  YuKalix

参考文档

https://developers.google.com/protocol-buffers/docs/reference/python-generated

安装

pip install grpcio grpcio-tools protobuf

定义Protocol Buffer文件

syntax="proto3";

package test;

service Bi {
    rpc HelloDewei(HelloDeweiReq) returns (HelloDeweiReply) {}
}


message HelloDeweiReq {
    string name = 1;
    int32 age = 2;
}

message HelloDeweiReply {
    string result = 1;
}

生成

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. hello.proto

编写服务端

import grpc
import time
import hello_pb2 as pb2
import hello_pb2_grpc as pb2_grpc

from concurrent import futures


class Bi(pb2_grpc.BiServicer):
    def HelloDewei(self, request, context):
        name = request.name
        age = request.age

        result = f'my name is {name}, i am {age} years old'
        return  pb2.HelloDeweiReply(result=result)


def run():
    mygrpc_server = grpc.server(
        futures.ThreadPoolExecutor(max_workers=4)
    )

    pb2_grpc.add_BiServicer_to_server(Bi(), mygrpc_server)
    mygrpc_server.add_insecure_port('127.0.0.1:9999')
    print('server will start as 127.0.0.1:9999')
    mygrpc_server.start()

    try:
        while True:
            time.sleep(3600)
    except KeyboardInterrupt:
        mygrpc_server.stop(0)


if __name__ == '__main__':
    run()

编写客户端

import grpc
import hello_pb2 as pb2
import hello_pb2_grpc as pb2_grpc


def run():
    conn = grpc.insecure_channel("127.0.0.1:9999")
    client = pb2_grpc.BiStub(channel=conn)
    response = client.HelloDewei(pb2.HelloDeweiReq(
        name="dewei",
        age=33
    ))

    print(response.result)

if __name__ == '__main__':
    run()
上一篇下一篇

猜你喜欢

热点阅读