网站制作学习网Python→正文:python grpc
字体:

python grpc

Python 2023/10/24 10:53:41  点击:不统计

http://%77%77%77%2E%66网站制作%6F学习网%72%61%73%70%2E%63%6E
 python 使用grpc 调用 ,从环境,服务到客户端,直接运行代码,全套python 调用grpc 服务代码案例实践。

 
1. 配置环境
python 需要安装
pip install grpcio
pip install grpcio-tools
pip install protobuf

2. 写 proto 协议文件,包含 类,方法,定义名称为Forasp.proto 代码如下
 
syntax = "proto3";
// 包名称 与文件名一致
package Forasp;
service Rpc_server_name {
rpc Rpc_fun(reqArg) returns (retArg) {} // 双向非流
}
// 定义请求reqArg 消息参数,
// 定义格式 类型 名称 = number; // number 标示第几个参数
message reqArg {
string site_domain = 1;
int32 site_year = 2;
}
// 定义 返回retArg 中参数,return_str
message retArg {
string return_str = 1;
}
3. 生成扩展文件
python 服务端,客户端生成代码命令如下:
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. Forasp.proto
行中最后参数 就是 Forasp.proto。 
 
生成后文件如下:
Forasp_pb2_grpc.py
Forasp_pb2.py
 
4. 服务端 代码
# code
import random
import time
import grpc
import Forasp_pb2 as pb2
import Forasp_pb2_grpc as pb2_grpc
from concurrent import futures


class ForaspServer(pb2_grpc.Rpc_server_nameServicer): # 这里参数是 proto service 的名字+ Servicer
def Rpc_fun(self, request, context): # 这里的函数名称就是 proto service 中的调用函数名称
site_domain = request.site_domain
site_year = request.site_year
n = random.randint(1, 10)
print("sleep", n) # 我们定义随机停留时间
time.sleep(n)
result = f'Website name is {site_domain}, running {site_year} year ; sleep time {n}'
return pb2.retArg(return_str=result) # 这里的调用函数名称为 service 中后面的返回函数名称 返回参数名return_str


def run():
grpc_server = grpc.server(
futures.ThreadPoolExecutor(max_workers=4), # 4个worker 跑
)
# 方法 add_Rpc_server_nameServicer_to_server 固定名称,替换即可。
pb2_grpc.add_Rpc_server_nameServicer_to_server(ForaspServer(), grpc_server)
grpc_server.add_insecure_port('0.0.0.0:5001')
print('Server start..')
grpc_server.start()

try:
while 1: # 让服务一直处于阻塞状态
time.sleep(3600)
except KeyboardInterrupt:
grpc_server.stop(0)


if __name__ == '__main__':
run()
5. 客户端 代码
 
# coding = utf-8
# 客户端 代码
import grpc
import Forasp_pb2 as pb2
import Forasp_pb2_grpc as pb2_grpc


def run():
# 远程连接 服务 地址以及端口
conn = grpc.insecure_channel('127.0.0.1:5001')
# 创建客户端 对象 这里是 服务名称+ Stub
client = pb2_grpc.Rpc_server_nameStub(channel=conn)
# 调用 方法 Rpc_fun 请求参数 reqArg
response = client.Rpc_fun(pb2.reqArg(
site_domain='www.forasp.cn',
site_year=18
), )
print(response.return_str) # 返回参数名称 return_str 在proto 定义的


if __name__ == '__main__':
run()
6. 服务运行
python server.py #命令行保持运行
 
python clint.py # 另起一个命令行

附件:所有代码案例下载

学习www.网for站asp制.cn作

·上一篇:python 读取excel sheet 内容 >>    ·下一篇: python 执行shell 命令 >>
推荐文章
最新文章