RPC基础
RPC 是两个子系统之间进行的直接消息交互,它使用操作系统提供的套接字来作为消息的载体,以特定的消息格式来定义消息内容和边界。
gRPC 是 Google 开源的基于 Protobuf 和 Http2.0 协议的通信框架,Google 深度学习框架 tensorflow 底层的 RPC 通信就完全依赖于 gRPC 库
gRPC的使用通常包括如下几个步骤:
- 通过protobuf来定义接口和数据类型
- 编写gRPC server端代码
- 编写gRPC client端代码
下面来通过一个实例来详细讲解上述的三步。
pip install grpcio
pip install protobuf
pip install grpcio_tools
下边的hello world实例:
编写协议文件
vim compute.proto
syntax = "proto3";
//说明使用proto3语法定义协议
package compute;
service Compute {
//我们rpc服务的名字
// 服务端 会用到
// 客户端 会用到
rpc SayHello (HelloRequest) returns (HelloReply) {}
// SayHello 调用的方法
// HelloRequest 客户端输入的消息(对象)
// HelloReply 服务端 返回的消息(对象)
}
message HelloRequest {
//定义 客户端输入消息内容
string helloworld = 1;
}message HelloReply {
//定义服务端消息内容
string result = 1;
}
python -m grpc_tools.protoc -I ./ --python_out=./ --grpc_python_out=./ compute.proto
编写客户端
import grpc
import compute_pb2
import compute_pb2_grpc
_HOST = '127.0.0.1'
_PORT = '5000'
def main():
with grpc.insecure_channel("{0}:{1}".format(_HOST, _PORT)) as channel:
client = compute_pb2_grpc.ComputeStub(channel=channel)
response = client.SayHello(compute_pb2.HelloRequest(helloworld="hello word"))
print("received: " + response.result)
if __name__ == '__main__':
main()
编写服务器
import time
import grpc
from concurrent import futures
import compute_pb2,compute_pb2_grpc # 刚刚生产的两个文件class ComputeServicer(compute_pb2_grpc.ComputeServicer):
def SayHello(self,request,ctx):
max_len = str(len(request.helloworld))
return compute_pb2.HelloReply(result=max_len)
def main():
# 多线程服务器
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
# 实例化 计算len的类
servicer = ComputeServicer()
# 注册本地服务,方法ComputeServicer只有这个是变的
compute_pb2_grpc.add_ComputeServicer_to_server(servicer, server)
# 监听端口
server.add_insecure_port('127.0.0.1:5000')
# 开始接收请求进行服务
server.start()
try:
print("servingstart...")
time.sleep(1000)
except KeyboardInterrupt:
print("stopping...")
server.stop(0)
if __name__ == '__main__':
main()
【comunicate|python gRPC (1)】
推荐阅读
- 推荐系统论文进阶|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 功能)