iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python下grpc与protobuf的编写使用示例
  • 463
分享到

python下grpc与protobuf的编写使用示例

2024-04-02 19:04:59 463人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1. python下protobuf使用1.1 安装protobuf1.2 protobuf3定义格式1.3 生成proto的Python文件1.4 对比一下protobuf生成

1. python下protobuf使用

1.1 安装protobuf

pip3.6 install grpcio #安装grpc
pip3.6 install grpcio-tools #安装grpc tools

1.2 protobuf3定义格式

新建protobuf文件名:hello.proto

syntax = "proto3";
message HelloRequest {
  string name = 1;
}

1.3 生成proto的python文件

cd hello.proto文件路径下
命令:python3.6 -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. hello.proto
注意:只有python生成两个文件
命令解释:
python3.6 -m grpc_tools.protoc:实际需要使用grpc_tools.protoc这里面的命令
--python_out=. :生成的python文件放在当前路径下,这是给rpc用的文件
--grpc_python_out=. :生成的python文件放在当前路径下,这是给grpc用的文件
-I.:指import,当前目录下找hello.proto文件

1.4 对比一下protobuf生成的效果

res.SerializeToString() # 序列化二进制
res2.ParseFromString(res_str) # 反序列化二进制
import JSON
from python_grpc.proto import hello_pb2
def main():
    res = hello_pb2.HelloRequest()
    res.name = "jeff"
    res_str = res.SerializeToString() # 序列化二进制
    print(res_str) # b'\n\x04jeff'
    print(len((res_str))) # 6,和json对比,josn长度为:16
    res2 = hello_pb2.HelloRequest()
    res2.ParseFromString(res_str) # 反序列化二进制
    print(res2.name) # jeff
    res_json = {
        "name":"jeff"
    }
    print(len(json.dumps(res_json))) # 16,json和proto压缩对比,proto压缩后:6
if __name__ == '__main__':
    main()

2.python下grpc使用

2.1编写hello.proto文件

syntax = "proto3";
package services;
option Go_package = "./;proto";
service Greeter {
    // 定义SayHello方法
    rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
    string name = 1; //编号
}
message HelloReply {
    string message = 1; //编号
}

2.2 生成proto的python文件

cd hello.proto文件路径下
命令:python3.6 -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. hello.proto
注意:只有python生成两个文件
命令解释:
python3.6 -m grpc_tools.protoc:实际需要使用grpc_tools.protoc这里面的命令
--python_out=. :生成的python文件放在当前路径下,这是给rpc用的文件
--grpc_python_out=. :生成的python文件放在当前路径下,这是给grpc用的文件
-I.:指import,当前目录下找hello.proto文件
注意:生成的*_grpc.py文件的导包需要修改,否则报错:要让python找到hello_pb2
import hello_pb2 as hello__pb2 改为:
from python_grpc.proto import hello_pb2 as hello__pb2

2.3 编写server端

from concurrent import futures
import grpc
from python_grpc.proto import hello_pb2, hello_pb2_grpc
# 业务处理
class Greeter(hello_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        return hello_pb2.HelloReply(message=f"你好,{request.name}")
# 启动
def start():
    # 1.实例化server
    Thread = futures.ThreadPoolExecutor(max_workers=10)  ## 设置线程池并发大小
    server = grpc.server(Thread)
    # 2.注册逻辑到server中
    hello_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    # 3.启动server
    server.add_insecure_port("127.0.0.1:8888")
    server.start()
    server.wait_for_termination()
if __name__ == '__main__':
    start()

2.4 编写cilent端

import grpc
from python_grpc.proto import hello_pb2, hello_pb2_grpc
# rpc调用
def main():
    # 这里使用with,调用完会自动关闭。优雅写法
    with grpc.insecure_channel("127.0.0.1:8888") as channel:
        stub = hello_pb2_grpc.GreeterStub(channel)
        # 调用定义的SayHello方法
        rep = stub.SayHello(
            hello_pb2.HelloRequest(name="jeff")  # 传递定义的HelloRequest类型参数
        )
        return rep
# 业务代码
def start():
    rep = main()
    print(rep.message)  # 你好,jeff
if __name__ == '__main__':
    start()

以上就是python下grpc与protobuf的编写使用的详细内容,更多关于python grpc与protobuf编写使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: python下grpc与protobuf的编写使用示例

本文链接: https://www.lsjlt.com/news/117243.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python下grpc与protobuf的编写使用示例
    目录1. python下protobuf使用1.1 安装protobuf1.2 protobuf3定义格式1.3 生成proto的python文件1.4 对比一下protobuf生成...
    99+
    2024-04-02
  • golang下grpc框架的使用编写示例
    目录1. 什么是grpc和protobuf1.1 grpc1.2 protobuf2.go下grpc2.1官网下载protobuf工具2.2 下载go的依赖包2.3 编写proto文...
    99+
    2024-04-02
  • 怎么用Python编写简单的gRPC服务
    这篇文章主要介绍了怎么用Python编写简单的gRPC服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。它可以...
    99+
    2023-06-20
  • 使用Python写spark 示例
    个人GitHub地址: https://github.com/LinMingQiang 为什么要使用Python来写Spark Python写spark我认为唯一的理由就是:你要做数据挖掘,AI相关的工作。因为很多做数挖的他们的基...
    99+
    2023-01-31
    示例 Python spark
  • python编程使用selenium编写测试用例
    目录1. 导入依赖2. 创建driver3. 执行自动化步骤4. 断言 from selenium import webdriver class TestBaiDu(): ...
    99+
    2024-04-02
  • python中 \r 与end=‘’ 的使用示例
    这篇文章主要介绍python中 \r 与end=‘’ 的使用示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入...
    99+
    2023-06-14
  • MySQL在cmd和python下的使用示例
    这篇文章主要介绍MySQL在cmd和python下的使用示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境配置1:安装mysql,环境变量添加mysql的bin目录环境配置2:p...
    99+
    2024-04-02
  • BAT与HTML混合编程写法的示例分析
    这篇文章给大家介绍BAT与HTML混合编程写法的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。核心代码:<!--::::::::::::::::::::::::::::::::BAT:::::::::::...
    99+
    2023-06-08
  • 用 Golang 编写计算方差的示例
    在Go语言中,计算一组数据的方差是一种常见的数学计算操作。方差用于衡量数据集中值的分散程度,是统计学中的重要概念之一。下面我们将通过一个示例来演示如何使用Go语言实现方差的计算。 首先...
    99+
    2024-02-25
    golang 示例 方差计算 go语言
  • PHP与JavaScript下Cookie交互使用的示例分析
    小编给大家分享一下PHP与JavaScript下Cookie交互使用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP与JavaScript下Cookie的交互使用下面的例子列出几种情形交互场景,列出JS和ph...
    99+
    2023-06-15
  • 亲自教你使用 ChatGPT 编写 SQL JOIN 查询示例
    目录一、ChatGPT 如何帮助 SQL 开发人员二、先决条件三、下载并安装 AdventureWorks2019 数据库四、SQL JOIN 查询示例六、ChatGPT 会取代数据...
    99+
    2023-02-23
    ChatGPT 编写 SQL JOIN 查询 ChatGPT 写 SQL ChatGPT  SQL JOIN 查询
  • Python函数定义与使用的示例分析
    这篇文章主要介绍Python函数定义与使用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!函数的定义什么是函数? &mdash; > 函数是具有某种特定功能的代码块,可以重复使用(在前面数据类型...
    99+
    2023-06-29
  • 基于Python编写一个点名器的示例代码
    目录前言主界面添加姓名查看花名册使用指南 名字转动功能完整代码前言 想起小学的时候老师想点名找小伙伴回答问题的时候,老师竟斥巨资买了个点名器。今日无聊便敲了敲小时候老师斥巨...
    99+
    2024-04-02
  • 详解python编程slice与indices函数用法示例
    一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。 下面是slice的简介: # slice 两种用法 class slice(stop)...
    99+
    2024-04-02
  • 深入了解python高阶函数编写与使用
    目录1.变量可以指向函数2.函数名也可以是变量。3.传入函数总结何为高阶函数,以实际代码为例子一步步深入概念。 1.变量可以指向函数 以abs()为例: >>>...
    99+
    2024-04-02
  • HTML中空元素与使用小写标签的示例分析
    这篇文章主要为大家展示了“HTML中空元素与使用小写标签的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML中空元素与使用小写标签的示例分析”这篇文...
    99+
    2024-04-02
  • 初次使用Eclipse下的Python编
    初次使用Eclipse下的Python编程       Python(KK 英语发音:/'paθɑn/, DJ 英语发音:/paiθn/),是一种面向对象、直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十...
    99+
    2023-01-31
    Eclipse Python
  • C#使用随机数编写班级点名器的示例代码
    目录随机数可以做什么?班级点名器其他用途英文意思 随机数可以做什么? 生成一些随机的数字用途非常的广泛, 例如随机抽取数据库的一条记录,把生成的数字给变量,某一个时间点执行一些代码...
    99+
    2024-04-02
  • gearman的安装与使用示例
    Gearman是一个开源的分布式作业调度系统,可以实现分布式任务调度和并行计算。下面是Gearman的安装和使用示例:1. 安装Ge...
    99+
    2023-08-24
    gearman
  • pytorch下tensorboard的使用程序示例
    目录一、tensorboard程序实例:1.代码2.在命令提示符中操作3.在浏览器中打开网址4.效果二、writer.add_scalar()与writer.add_scalars(...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作