1、安装python所需的库。
pipinstallgrpcio pipinstallgrpcio-tools pipinstallprotobuf
2、定义GRPC接口。
syntax="proto3"; optioncc_generic_services=true; //定义服务界面 serviceGrpcService{ rpchello(HelloRequest)returns(HelloResponse)多个接口可以在服务中定义,也就是多函数功能 } //请求参数 messageHelloRequest{ stringdata=1;//数字1和2是参数的位置顺序,而不是赋值参数 Skillskill=2;//支持自定义数据格式,非常灵活 }; //返回对象 messageHelloResponse{ stringresult=1; map<string,int32>map_result=2;//支持map数据格式,类似dict }; messageSkill{ stringname=1; };
3、语言代码由protoc和插件编译生成。
python-mgrpc_tools.protoc-I./--python_out=./--grpc_python_out=../hello.proto
使用编译工具将proto文件转换为py文件,直接在当前文件目录下运行上述代码。
4、编写grpc服务器代码。
#!/usr/bin/envpython #coding=utf8 importtime fromconcurrentimportfutures importgrpc fromgRPC_exampleimporthello_pb2_grpc,hello_pb2 _ONE_DAY_IN_SECONDS=60*60*24 classTestService(hello_pb2_grpc.GrpcServiceServicer): ''' 继承Grpcserviceservicer,实现hello方法 ''' def__init__(self): pass defhello(self,request,context): ''' 实现hello的具体方法,Helloresponse返回按照pb返回对象结构 :paramrequest: :paramcontext: :return: ''' result=request.data+request.skill.name+"thisisgprctestservice" list_result={"12":1232} returnhello_pb2.HelloResponse(result=str(result), map_result=list_result) defrun(): ''' 启动模拟服务 :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("startservice...") try: whileTrue: time.sleep(_ONE_DAY_IN_SECONDS) exceptKeyboardInterrupt: server.stop(0) if__name__='__main__': run()
5、编写grpc客户端代码。
#!/usr/bin/envpython #coding=utf8 importgrpc fromgRPC_exampleimport#!/usr/bin/envpython #coding=utf8 importgrpc fromgRPC_exampleimporthello_pb2_grpc,hello_pb2 defrun(): ''' 模拟请求服务方法信息 :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="xiaogang",skill=skill) respnse=client.hello(request) print("received:",respnse.result) if__name__='__main__': run() defrun(): ''' 模拟请求服务方法信息 :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="xiaogang",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电脑。