Python如何搭建gRPC服务

美女程序员鼓励师

1、安装python所需的库。

pip install grpcio

pip install grpcio-tools  

pip install protobuf

2、定义gRPC接口。

syntax = "proto3";

option cc_generic_services = true;

//定义服务接口

service GrpcService {

    rpc hello (HelloRequest) returns (HelloResponse) {}  //一个服务中可以定义多个接口,也就是多个函数功能

}

//请求的参数

message HelloRequest {

    string data = 1;   //数字1,2是参数的位置顺序,并不是对参数赋值

    Skill skill = 2;  //支持自定义的数据格式,非常灵活

};

//返回的对象

message HelloResponse {

    string result = 1;

    map<string, int32> map_result = 2; //支持map数据格式,类似dict

};

message Skill {

    string name = 1;

};

3、用protoc和插件编译生成语言代码。

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

使用编译工具将proto文件转换成py文件,直接在当前文件目录下运行上述代码。

4、编写grpc服务器代码。

#! /usr/bin/env python

# coding=utf8

import time

from concurrent import futures

import grpc

from gRPC_example import hello_pb2_grpc, hello_pb2

_ONE_DAY_IN_SECONDS = 60 * 60 * 24

class TestService(hello_pb2_grpc.GrpcServiceServicer):

    '''

    继承GrpcServiceServicer,实现hello方法

    '''

    def __init__(self):

        pass

    def hello(self, request, context):

        '''

        具体实现hello的方法,并按照pb的返回对象构造HelloResponse返回

        :param request:

        :param context:

        :return:

        '''

        result = request.data + request.skill.name + " this is gprc test service"

        list_result = {"12": 1232}

        return hello_pb2.HelloResponse(result=str(result),

                                       map_result=list_result)

def run():

    '''

    模拟服务启动

    :return:

    '''

    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

    hello_pb2_grpc.add_GrpcServiceServicer_to_server(TestService(),server)

    server.add_insecure_port('[::]:50052')

    server.start()

    print("start service...")

    try:

        while True:

            time.sleep(_ONE_DAY_IN_SECONDS)

    except KeyboardInterrupt:

        server.stop(0)

if __name__ == '__main__':

    run()

5、编写gRPC客户端代码。

#! /usr/bin/env python

# coding=utf8

import grpc

from gRPC_example import #! /usr/bin/env python

# coding=utf8

import grpc

from gRPC_example import hello_pb2_grpc, hello_pb2

def run():

    '''

    模拟请求服务方法信息

    :return:

    '''

    conn=grpc.insecure_channel('localhost:50052')

    client = hello_pb2_grpc.GrpcServiceStub(channel=conn)

    skill = hello_pb2.Skill(name="engineer")

    request = hello_pb2.HelloRequest(data="xiao gang", skill=skill)

    respnse = client.hello(request)

    print("received:",respnse.result)

if __name__ == '__main__':

    run()

def run():

    '''

    模拟请求服务方法信息

    :return:

    '''

    conn=grpc.insecure_channel('localhost:50052')

    client = hello_pb2_grpc.GrpcServiceStub(channel=conn)

    skill = hello_pb2.Skill(name="engineer")

    request = hello_pb2.HelloRequest(data="xiao gang", skill=skill)

    response = client.hello(request)

    print("received:",response.result)

if __name__ == '__main__':

    run()

6、调用测试。

首先启动运行服务器的代码,然后启动运行客户端的代码。

以上就是Python搭建gRPC服务的方法,希望对大家有所帮助。更多Python学习指路:python基础教程

本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

以上是 Python如何搭建gRPC服务 的全部内容, 来源链接: utcz.com/z/545801.html

回到顶部