本篇内容主要讲解“Python中怎么搭建gRPC服务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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服务”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。