Protocol buffers--python 实践(一) 简介以及安装与使用
2017-01-16 16:31
671 查看
由于最近对grpc产生了浓厚的兴趣,但是那是一整套东西,看了一下用到的东西不少,所以抽丝剥茧先写写这几天调研的protocol buffer -python的收获。
简介:
以下引用自官方首页文档:
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica; color: #212121 }
span.s1 { }
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.
Protocol Buffers以下简称pb,是google开发的一个可以序列化 反序列化object的数据交换格式,类似于xml,但是比xml 更轻,更快,更简单。而且以上的重点突出一个跨平台,和xml json等数据序列化一样,跨平台跨语言。
现在pb正处在换代的时期,google 2016年7月28日证实发布了version3.0正式宣布从2.x以及3.x 各种alpha-beta版本跨越至正式版。相关文档还在积极跟进中。从pb的官方网站可以看到,已经有pb3的language guide了,而且相关tutorials的各主要语言的实现也在积极跟进之中。 就是因为这点,3.x文档还不够完善,所以现在还是在学习和使用2.x。不过2.x的python版本实现似乎并不是特别好,经过测试比json慢很多,但是有办法可以解决这个问题,后面会提到。
安装:
1. 前往github:https://github.com/google/protobuf/releases 下载最新版本的对应语言的pb,比如这里我是python 所以我会下载。
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #4078c0 }
span.s1 { }
protobuf-python-3.1.0.zip
2. 下载完毕之后运行包中自带config文件。
3. make&&make install。
4. 之后便可以使用命令 protoc --version 查看安装完毕的版本号。
这里可以继续安装c++ 实现 for python 可以提升序列化和反序列化的性能。
5. 进入python文件夹
6. Build and run the tests
7. 安装
使用c++ for python的实现要比pure python 实现快10倍左右。是非常大的性能差距。
另外安装方面也可以直接安装grpc:
然后会安装pb依赖,grpc_tools.protoc工具就是protocol buffer.
使用:
归根到底,pb还是一个序列化反序列化工具,那么使用上来说其实我个人认为是没有json那么简单的,但是却可以保证即使是在python这种动态语言中,数据类型也不会出现错误。他的使用需要定义一个.proto文件,该文件里面会定义号数据类型和格式。我在这里就不再搬运各语言对应的字段,因为这些官方文档中都写的非常清楚。这里直接上最简单的使用。
首先在say_hi.proto文件中定义一个需要在代码中传递的数据结构:
然后使用命令
在当前路径下面生成一个say_hi_pb2.py文件。
-I 是指定.proto文件所在路径。
--python_out 输出生成好的pb2.py文件所在路径。
后面参数指定使用哪个.proto文件。
之后我们就可以愉快的使用这个生成好的文件的类进行数据序列化反序列化了。使用例子如下:
以上。
Reference:
https://developers.google.com/protocol-buffers/ protocol-buffers offcial doc
http://blog.csdn.net/handsomekang/article/details/17484139 飘逸的python - 使用protocal buffers
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px "Microsoft YaHei"; color: #666666; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #535f61; background-color: #ebfaf8 }
span.s1 { }
简介:
以下引用自官方首页文档:
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica; color: #212121 }
span.s1 { }
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.
Protocol Buffers以下简称pb,是google开发的一个可以序列化 反序列化object的数据交换格式,类似于xml,但是比xml 更轻,更快,更简单。而且以上的重点突出一个跨平台,和xml json等数据序列化一样,跨平台跨语言。
现在pb正处在换代的时期,google 2016年7月28日证实发布了version3.0正式宣布从2.x以及3.x 各种alpha-beta版本跨越至正式版。相关文档还在积极跟进中。从pb的官方网站可以看到,已经有pb3的language guide了,而且相关tutorials的各主要语言的实现也在积极跟进之中。 就是因为这点,3.x文档还不够完善,所以现在还是在学习和使用2.x。不过2.x的python版本实现似乎并不是特别好,经过测试比json慢很多,但是有办法可以解决这个问题,后面会提到。
安装:
1. 前往github:https://github.com/google/protobuf/releases 下载最新版本的对应语言的pb,比如这里我是python 所以我会下载。
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #4078c0 }
span.s1 { }
protobuf-python-3.1.0.zip
2. 下载完毕之后运行包中自带config文件。
3. make&&make install。
4. 之后便可以使用命令 protoc --version 查看安装完毕的版本号。
(grpc)piperck➜ python ᐅ protoc --version libprotoc 3.0.0
这里可以继续安装c++ 实现 for python 可以提升序列化和反序列化的性能。
5. 进入python文件夹
6. Build and run the tests
python setup.py build python setup.py test
7. 安装
python setup.py install --cpp_implementation
使用c++ for python的实现要比pure python 实现快10倍左右。是非常大的性能差距。
另外安装方面也可以直接安装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=. hello_world.say_hi.proto
在当前路径下面生成一个say_hi_pb2.py文件。
-I 是指定.proto文件所在路径。
--python_out 输出生成好的pb2.py文件所在路径。
后面参数指定使用哪个.proto文件。
之后我们就可以愉快的使用这个生成好的文件的类进行数据序列化反序列化了。使用例子如下:
# 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 输出: 123 do_something xiba
以上。
Reference:
https://developers.google.com/protocol-buffers/ protocol-buffers offcial doc
http://blog.csdn.net/handsomekang/article/details/17484139 飘逸的python - 使用protocal buffers
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px "Microsoft YaHei"; color: #666666; background-color: #ffffff }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #535f61; background-color: #ebfaf8 }
span.s1 { }
相关文章推荐
- 关于Python的简介以及安装使用
- paip.python ide eric5-5.3.7 安装以及建立项目使用 最佳实践
- Python Matplotlib安装方法以及使用
- python使用matplotlib 以及matplotlib安装绘图(window7)
- pip的安装,更新,卸载模块以及使用方法 python
- OpenCV实践之路——Python的安装和使用
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)
- 【SQL】MySQL的安装使用以及SQL语法简介
- Qt简介以及如何配置Qt使用VS2010进行开发 分类: QT学习实践 2015-05-05 16:02 34人阅读 评论(0) 收藏
- [Python]Pip的安装以及简单的使用
- Python WxPython 的安装以及使用
- Python学习笔记1:windows下Python的安装,以及IDLE的使用
- python下使用mysql.connector 安装以及连接数据库的操作
- thrift之python客户端安装和使用 以及卸载
- Python开发之扩展库的安装指南及Suds(Webservice)的使用简介
- Ubuntu 10.10安装和使用pythonbrew简介
- python easy_install的安装 以及使用
- python安装MySQLdb:在windows下或linux下(以及eclipse中pydev使用msqldb的配置方法)
- centos搭建pyenv环境以及使用pyenv安装Python和ipython
- linux(CentOS6)上mysql的安装、远程登录和使用以及mysql-python的实验