安装依赖
# tools 包含代码生成工具,会自动安装依赖的 grpcio 包
pip install grpcio_tools
编写协议文件
编写协议文件pi.proto
syntax = "proto3";
package pi;
// pi service
service PiCalculator {
// pi method
rpc Calc(PiRequest) returns (PiResponse) {}
}// pi input
message PiRequest {
int32 n = 1;
}// pi output
message PiResponse {
double value = https://www.it610.com/article/1;
}
生成代码
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. pi.proto
- 这个命令行有很多参数,其中python_out目录指定pi_pb2.py文件的输出路径,grpc_python_out指定pi_pb2_grpc.py文件的输出路径。-I参数指定协议文件的查找目录,我们都将它们设置为当前目录。
- 命令执行后,可以看到当前目录下多了两个文件,pi_pb2.py和pi_pb2_grpc.py。前者是消息序列化类,后者包含了服务器 Stub 类和客户端 Stub 类,以及待实现的服务 RPC 接口。
server端代码
# -*- coding:utf-8 -*-
# server.pyimport math
import grpc
import time
from concurrent import futuresimport pi_pb2, pi_pb2_grpc# 圆周率计算服务实现类
class PiCalculatorServicer(pi_pb2_grpc.PiCalculatorServicer):
def Calc(self, request, context):
# 计算圆周率的逻辑在这里
s = 0.0
for i in range(request.n):
s += 1.0 / (2 * i + 1) / (2 * i + 1)# 注意返回的是一个响应对象
return pi_pb2.PiResponse(value=https://www.it610.com/article/math.sqrt(8 * s))def main():
# 多线程服务器
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
# 实例化圆周率服务器类
pi_server = PiCalculatorServicer()
# 注册本地服务
pi_pb2_grpc.add_PiCalculatorServicer_to_server(pi_server, server)
# 监听端口
server.add_insecure_port("127.0.0.1:8080")
# 开始接收请求进行服务
server.start()
# 使用ctrl+c可以退出服务
try:
time.sleep(1000)
except KeyboardInterrupt:
server.stop(0)if __name__ == '__main__':
main()
【grpc服务python版本】client端代码
# -*- coding:utf-8 -*-
# client.pyimport grpcimport pi_pb2
import pi_pb2_grpcdef main():
channel = grpc.insecure_channel('localhost:8080')
# 使用 stub
client = pi_pb2_grpc.PiCalculatorStub(channel)
# 调用吧
for i in range(1, 1000):
print(client.Calc(pi_pb2.PiRequest(n=i)).value)if __name__ == '__main__':
main()
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)