一、安装

pip install grpcio  # gprc
pip install grpcio-tools  # 代码生成工具
pip install protobuf  # 协议

二、创建proto目录并创建proto文件

# user.proto
// 指定版本
syntax="proto3";
// 包
package user;// 创建service
service User {// user methodrpc AddUser(UserRequest) returns (UserResponse) {}rpc GetUser(GetUserRequest) returns (GetUserResponse) {}
}// 请求参数消息体 1、2 是指参数的个数顺序
message UserRequest {string username = 1;int32 age = 2;
}// 返回参数消息体
message UserResponse {string err = 1;
}// 请求参数消息体
message GetUserRequest {string username = 1;
}// 返回参数消息体
message GetUserResponse {string username = 1;int32 age = 2;
}

# 生成pb2.py、pb2_grpc.py文件

python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. ./proto/user.proto

#  --python_out=  pb2.py 文件路径
#  --grpc_python_out=  pb2_grpc.py文件路径
#  ./proto/user.proto  proto文件路径

注: 这里遇到一个问题 
     使用 python3 -m grpc_tools.protoc -I=./proto --python_out=./proto --grpc_python_out=./proto ./proto/user.proto, 生成的pb2_grpc.py文件 导入 pb2.py 是 import user_pb2 as user__pb2, 这里会报错,应该是 from proto import user_pb2 as user__pb2

当我使用  python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. ./proto/user.proto 生成时,不会有这个问题。导入变成 from proto import user_pb2 as proto_dot_user__pb2

三、服务端代码

# user.py
from proto import user_pb2, user_pb2_grpcclass UserServicer(user_pb2_grpc.UserServicer):def AddUser(self, request, context):print(request.username, request.age)# 具体的业务逻辑return user_pb2.UserResponse(err='ok')def GetUser(self, request, context):print(request.username)# 具体的业务逻辑return user_pb2.GetUserResponse(username='danni', age=12)
# server.py
import timeimport grpc
from concurrent import futuresfrom proto import user_pb2, user_pb2_grpc
from moudle.user import UserServicerdef main():# futures.ThreadPoolExecutor(max_workers=10) 指定最大线程数,不指定默认是 cpu个数 x 5"""if max_workers is None:# Use this number because ThreadPoolExecutor is often# used to overlap I/O instead of CPU work.max_workers = (os.cpu_count() or 1) * 5"""server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))# 注册User Serviceuser_server = UserServicer()user_pb2_grpc.add_UserServicer_to_server(user_server, server)# 启动服务server.add_insecure_port("127.0.0.1:8000")server.start()try:print('start rpc service')while True:time.sleep(60 * 60)except:server.stop(0)if __name__ == '__main__':main()

四、客户端代码

# client.py
import grpcfrom proto import user_pb2_grpc, user_pb2def main():# 连接RPC 服务器channel = grpc.insecure_channel("localhost:8000")# 创建 Stubuser_cli = user_pb2_grpc.UserStub(channel)# 调用 AddUservalue = user_cli.AddUser(user_pb2.UserRequest(username='danni', age=20))print(value)if __name__ == '__main__':main()

一个简单的python gprc使用,便于理解

python 使用grpc相关推荐

  1. python grpc 并发_用Python进行gRPC接口测试(二)

    今天将继续为大家带来用Python进行gRPC接口测试的续集,上次主要讲了一下前期准备工作和简单RPC通信方式的实现,这次我们将着眼于另一类gRPC接口的通信形式--流式RPC. 一.流式RPC的三种 ...

  2. 技术实践:教你用Python搭建gRPC服务

    摘要:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开发,且支持众多开发语言. 本文分享自华为云社区& ...

  3. grpc python stream_grpc| python 实战 grpc【h】

    title: grpc| python 实战 grpc description: 只要代码可以跑起来, 很多难题都会迎刃而解. so, keep coding and stay hungry. 之前用 ...

  4. 小猿圈python_小猿圈Python配置gRPC环境

    现在学习Python的同学有没有遇到过一些问题?有没有问题不知道怎么去解决呢?下面小猿圈Python讲师每天为你讲解一个知识点,今天讲解的是Python配置gRPC环境,希望对你有所帮助. gRPC是 ...

  5. grpc环境配置 python_grpc| python 实战 grpc【h】

    title: grpc| python 实战 grpc description: 只要代码可以跑起来, 很多难题都会迎刃而解. so, keep coding and stay hungry. 之前用 ...

  6. grpc python stream_Python gRPC笔记

    简介: gRPC 是Google发布的一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计.gRPC提供了支持多种编程语言的.对网络设备进行配置和纳管的方法.目前提供 C.Java ...

  7. python使用GRPC远程调用rpc接口

    1.需要下载的包 pip install grpcio pip install grpcio-tools pip install protobuf 为了更好的书写proto文件,你可以在pycharm ...

  8. 拥抱云原生,Java与Python基于gRPC通信

  9. python go rpc_Python RPC 之 gRPC

    转http://blog.csdn.net/coderinfo/article/details/60883030 gRPC 简介: gRPC 是一款高性能.开源的 RPC 框架,产自 Google,基 ...

最新文章

  1. 计算机计算能力,计算机/电脑为什么拥有计算能力
  2. Java虚拟机监控指标及监控配置
  3. usermod命令的一些用法详解
  4. 【知识图谱】知识推理,知识图谱里最“人工智能”的一段
  5. Python - Windows系统下安装使用virtualenv
  6. 最全的 eclipse web 项目目录结构
  7. FLASH STUDY LOG
  8. 云+X案例展 | 传播类:k3s基于逾百台工控机的应用实践
  9. linux中删除文件命令
  10. Linux系统备份与还原
  11. 十段均衡器开源 android,音频EQ(均衡器) - osc_1jvmu893的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 软件缺陷分析—软件测试之犯罪心理学
  13. STM32F103入门 | 2.STM32F103xx内部资源介绍
  14. 计算机为什么找不到网络打印机,电脑找不到网络打印机怎么办
  15. elementui分页插件使用总结
  16. Android下磁盘分区表损坏,修复分区表,教您硬盘分区表损坏怎么修复
  17. 创建自己的腾讯云存储桶,将图片上传到腾讯云,并实现父子之间的数据双向绑定
  18. 计算机英语四六级成绩查询,CET成绩查询常见问题答疑-99宿舍
  19. 转:如何在艰难时期留住好员工
  20. Android系统WebView无法安装,Android系统进程无法加载WebView

热门文章

  1. 中国化学原料药行业投资风险与盈利模式分析报告2022版
  2. raid卷的作用_Raid卷详解
  3. 您的teamviewer会话已经超时,即将停止
  4. 天龙八部OL登录器编写之创建快捷方式
  5. python中rect用法_HTML DOM rect() 方法
  6. Python学习笔记(飞机大战项目练习)---B站黑马程序员
  7. 学了Python基础,苦于无法上手实战,看这本
  8. [CS15] Fast and Accurate Recurrent Neural Network Acoustic Models for Speech Recognition-Has¸im Sak
  9. BI领导驾驶舱的功能特点
  10. 用Java实现简易计算器