【python+protobuf】在python中使用protocol buffer
2016-11-09 21:48
525 查看
在做remote客户端模拟并发测试时,使用近段时间学习的python语言,加上需要发送protobuf数据。现在首先研究一下怎么去入手安装protobuf
各种说法,比如将protoc.exe文件拷贝到protobuf-master/python目录下,打开cmd,切换到protobuf-master/python目录下,依次执行:
提示失败!
查找着发现使用其的目的是将.proto文件转换成.py文件,以供后续使用。故直接下载protoc.exe文件即可
网上搜索“protoc.exe下载”,即可直接下载protoc.exe文件
message:消息定义的关键字
people:消息的名字,等同于结构体名或类名
required:前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值。与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和repeated,带有这两种限定符的消息字段则没有required字段这样的限制。相比于optional,repeated主要用于表示数组字段
string 和 int32:分别表示字符串型和短整型的消息字段
name 和 height:分别表示消息字段名
标签数字1和2:表示不同的字段在序列化后的二进制数据中的布局位置。在该例中,passwd字段编码后的数据一定位于acctID之后。需要注意的是该值在同一message中不能重复。另外,对于Protocol Buffer而言,标签值为1到15的字段在编码时可以得到优化,既标签值和类型信息仅占有一个byte,标签范围是16到2047的将占有两个bytes,而Protocol Buffer可以支持的字段数量则为2的29次方减一。有鉴于此,我们在设计消息结构时,可以尽可能考虑让repeated类型的字段标签位于1到15之间,这样便可以有效的节省编码后的字节数
需要编译的people_pb2.proto 文件存放在 .\SRC_pro 目录下,生成的文件放在.\SRC_py下,则可以使用命令
执行命令后,将在.\SRC_py目录下生成一个people_pb2.py的文件
一个简单的调试使用Demo:
输出结果为:
以上搞定一个简单的protobuf下载安装以及简单应用的过程
安装protoc
在网上找了一下,大部分都是Linux上的安装教程,提供的链接都是:http://code.google.com/p/protobuf/downloads/list各种说法,比如将protoc.exe文件拷贝到protobuf-master/python目录下,打开cmd,切换到protobuf-master/python目录下,依次执行:
python setup.py build python setup.py test python setup.py install
提示失败!
查找着发现使用其的目的是将.proto文件转换成.py文件,以供后续使用。故直接下载protoc.exe文件即可
网上搜索“protoc.exe下载”,即可直接下载protoc.exe文件
定义一个proto文件
因为是.proto文件转换成.py文件,必须的得有proto文件,现在定义一个people.proto文件,内容如下:message people { required string name = 1; optional int32 height = 2; }
message:消息定义的关键字
people:消息的名字,等同于结构体名或类名
required:前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值。与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和repeated,带有这两种限定符的消息字段则没有required字段这样的限制。相比于optional,repeated主要用于表示数组字段
string 和 int32:分别表示字符串型和短整型的消息字段
name 和 height:分别表示消息字段名
标签数字1和2:表示不同的字段在序列化后的二进制数据中的布局位置。在该例中,passwd字段编码后的数据一定位于acctID之后。需要注意的是该值在同一message中不能重复。另外,对于Protocol Buffer而言,标签值为1到15的字段在编码时可以得到优化,既标签值和类型信息仅占有一个byte,标签范围是16到2047的将占有两个bytes,而Protocol Buffer可以支持的字段数量则为2的29次方减一。有鉴于此,我们在设计消息结构时,可以尽可能考虑让repeated类型的字段标签位于1到15之间,这样便可以有效的节省编码后的字节数
.proto文件生成Python可用的.py文件
写好proto文件后就可以用protobuf编译器将该文件编译成目标语言,我们使用的是python需要编译的people_pb2.proto 文件存放在 .\SRC_pro 目录下,生成的文件放在.\SRC_py下,则可以使用命令
protoc -I=.\SRC_pro --python_out=.\SRC_py .\SRC_pro\people_pb2.proto
执行命令后,将在.\SRC_py目录下生成一个people_pb2.py的文件
调试使用例子
将people_pb2.py导入pycharm,创建工程,即可调用一个简单的调试使用Demo:
import people_pb2 pbFirstPeople = people_pb2.people() pbFirstPeople.name = "joey" pbFirstPeople.height = 160 print pbFirstPeople
输出结果为:
name: "joey" height: 160
以上搞定一个简单的protobuf下载安装以及简单应用的过程
相关文章推荐
- windows下使用python googleprotobuf
- 在Python 3.4里使用Protobuf 2.6
- protobuf安装使用(python版)
- python版protobuf安装和使用
- C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
- Unity3D使用TCP/IP协议,传递protocol buffer消息protobuf-net
- Unity3D使用TCP/IP协议,传递protocol buffer消息protobuf-net
- Protocol Buffer(ProtoBuf)在U3D的使用
- C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
- caffe中使用python自定义层出现protobuf版本不对
- Unity3D 使用 TCP/IP 协议,传递 protocol buffer 消息( protobuf-net
- C#使用Protocol Buffer(ProtoBuf)进行对象的序列化与反序列化
- 在Python中使用protobuf2.6.1 string format utf-8 and unicode error
- Protobuf在Python中的使用
- Protobuf在Python中的使用
- protobuf for python 安装与使用
- C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
- python3 使用 protobuf3 序列化踩过的坑
- 在python中使用grpc和protobuf
- 【protobuf】protobuf ubuntu python3使用