python grpc初使用
1 .环境安装
sudo pip install grpcio
sudo pip install protobuf
sudo pip install grpcio-tools
文件目录结构如下:
├── client
│└── client.py
├── example
│├── build.txt
│├── data.proto
│└── __init__.py
└── server
└── server.py
2 .protobuf使用
在 example 目录下,执行:
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./data.proto
此时会生成data_pb2_grpc.py 与data_pb2.py
example 下的目录如下:
├── build.txt
├── data_pb2_grpc.py
├── data_pb2.py
├── data.proto
└── __init__.py
3 . test事例
Client.py的代码如下:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
import os
import syscurrent_fonder_path = os.path.split(os.path.realpath(__file__))[0]
print (current_fonder_path)
protocal_path = os.path.join(current_fonder_path,"..","example")
print (protocal_path)
sys.path.append(protocal_path)
import data_pb2, data_pb2_grpc_HOST = 'localhost'
_PORT = '8080'def run():
conn = grpc.insecure_channel(_HOST + ':' + _PORT)# 监听频道
print(conn)
client = data_pb2_grpc.FormatDataStub(channel=conn)# 客户端使用Stub类发送请求,参数为频道,为了绑定链接
print(client)
response = client.DoFormat(data_pb2.actionrequest(text='hello,world!'))# 返回的结果就是proto中定义的类
print("received: " + response.text + str(response.value))if __name__ == '__main__':
run()
server.py的代码如下:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
import time
from concurrent import futures
import os
import syscurrent_fonder_path = os.path.split(os.path.realpath(__file__))[0]
print (current_fonder_path)
protocal_path = os.path.join(current_fonder_path,"..","example")
print (protocal_path)
sys.path.append(protocal_path)
importdata_pb2,data_pb2_grpc _ONE_DAY_IN_SECONDS = 60 * 60 * 24
_HOST = 'localhost'
_PORT = '8080'# 实现一个派生类,重写rpc中的接口函数.自动生成的grpc文件中比proto中的服务名称多了一个Servicer
class FormatData(data_pb2_grpc.FormatDataServicer):
# 重写接口函数.输入和输出都是proto中定义的Data类型
def DoFormat(self, request, context):
str = request.text
return data_pb2.actionresponse(text=str.upper(),value=https://www.it610.com/article/1.0)# 返回一个类实例def serve():
# 定义服务器并设置最大连接数,corcurrent.futures是一个并发库,类似于线程池的概念
grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))# 创建一个服务器
data_pb2_grpc.add_FormatDataServicer_to_server(FormatData(), grpcServer)# 在服务器中添加派生的接口服务(自己实现了处理函数)
grpcServer.add_insecure_port(_HOST +':' + _PORT)# 添加监听端口
grpcServer.start()#启动服务器
try:
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
grpcServer.stop(0) # 关闭服务器if __name__ == '__main__':
serve()
【linux|python grpc初使用】4 .实验结果如下:
文章图片
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Linux|109 个实用 shell 脚本
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- linux笔记|linux 常用命令汇总(面向面试)
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- Linux|Linux--网络基础