发布时间:2022-05-14 文章分类:Python 知识 投稿人:李佳 字号: 默认 | | 超大 打印

Python如何搭建gRPC服务

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的方法,并按照pb的返回对象构造HelloResponse返回
: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基础教程