Protocol buffers--python 实践 简介以及安装与使用
简介:
Protocol Buffers以下简称pb,是google开发的一个可以序列化 反序列化object的数据交换格式,类似于xml,但是比xml 更轻,更快,更简单。而且以上的重点突出一个跨平台,和xml json等数据序列化一样,跨平台跨语言。
安装:
前往github:https://github.com/google/protobuf/releases 下载最新版本的对应语言的pb,比如这里我是python 所以我会下载。
protobuf-python-3.11.4.tar.gz
1.解压 protobuf-python-3.11.4.tar.gz 并进入解压目录
2.运行包中自带config文件 ./configure
3.make
4.make install (可能要sudo 权限)
5.之后便可以使用命令 protoc --version 查看安装完毕的版本号
另外从网上看到还可以这样安装(运行命令,貌似没报什么错):
另外安装方面也可以直接安装grpc:
pip install grpcio
pip install grpcio-tools
然后会安装pb依赖,grpc_tools.protoc工具就是protocol buffer.
使用
归根到底,pb还是一个序列化反序列化工具,那么使用上来说其实我个人认为是没有json那么简单的,但是却可以保证即使是在python这种动态语言中,数据类型也不会出现错误。他的使用需要定义一个.proto文件,该文件里面会定义号数据类型和格式。我在这里就不再搬运各语言对应的字段,因为这些官方文档中都写的非常清楚。这里直接上最简单的使用。
首先在say_hi.proto文件中定义一个需要在代码中传递的数据结构:
syntax = "proto2";
package hello_word;
message SayHi {
required int32 id = 1;
required string something = 2;
optional string extra_info = 3;
}
然后使用命令:
protoc -I . --python_out=. say_hi.proto
在当前路径下面生成一个say_hi_pb2.py文件。
-I 是指定.proto文件所在路径。
--python_out 输出生成好的pb2.py文件所在路径。
后面参数指定使用哪个.proto文件。
之后我们就可以愉快的使用这个生成好的文件的类进行数据序列化反序列化了。使用例子如下:
创建一个test.py 文件
# coding: utf-8
import say_hi_pb2
po = say_hi_pb2.SayHi()
po.id = 123
po.something = 'do_something'
po.extra_info = 'xiba'
bilibili = po.SerializeToString()
oo = say_hi_pb2.SayHi()
oo.ParseFromString(bilibili)
print oo.id
print oo.something
print oo.extra_info
运行 python test.py
结果输出如下:
123
do_something
xiba