简介:

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

Protocol buffers--python 实践 简介以及安装与使用的更多相关文章

  1. Python的简介以及安装和第一个程序以及用法

    Python的简介: 1.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Pytho ...

  2. (一)、Python的简介与安装

    Python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承. ...

  3. Python模块简介及安装 [numpy,pandas,matplotlib,scipy,statsmodels,Gensim,sklearn,keras]

    https://pan.baidu.com/s/1bpVv3Ef  67bd          模块安装文件下载地址 pip install "numpy-1.12.0b+mkl-cp35- ...

  4. Protocol Buffers官方文档(proto3语言指南)

    本文是对官方文档的翻译,大部分内容都是引用其他一些作者的优质翻译使文章内容更加通俗易懂(自己是直译,读起来有点绕口难理解,本人英文水平有限),参考的文章链接在文章末尾 这篇指南描述如何使用protoc ...

  5. Protocol buffers--python 实践(一) 简介以及安装与使用

    由于最近对grpc产生了浓厚的兴趣,但是那是一整套东西,看了一下用到的东西不少,所以抽丝剥茧先写写这几天调研的protocol buffer -python的收获. 简介: 以下引用自官方首页文档: ...

  6. Google Protocol Buffers简介

    什么是 protocol buffers ? Protocol buffers 是一种灵活.高效的序列化结构数据的自动机制--想想XML,但是它更小,更快,更简单.你只需要把你需要怎样结构化你的数据定 ...

  7. protobuf Protocol Buffers 简介 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 在centos 6.9下Protocol Buffers数据传输及存储协议的使用(python)

    我们知道Protocol Buffers是Google定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据 ...

  9. Centos 6.8 安装 Protocol Buffers , v3.2.0有 BUG ,安装 3.1.0

    Centos 6.8 安装 Protocol Buffers   , v3.2.0有 BUG ,安装 3.1.0 切换到用户目录 cd ~ 安装 python2.7,须加入zlib wget http ...

随机推荐

  1. Python匿名函数_return语句

    Python匿名函数: 使用 lambda 关键字创建匿名函数: lambda 定义的函数只是一个表达式,而不是代码块 lambda 函数拥有自己的命名空间,不能够访问参数列表之外的 或 全局命名空间 ...

  2. MySQL数据库常见命令

    数据库的操作 MySQL服务器的常见命令 开启:sudo service mysql start关闭:sudo service mysql stop重启:sudo service mysql rest ...

  3. PHP array_unique() 函数

    实例 移除数组中重复的值: <?php$a=array("a"=>"red","b"=>"green" ...

  4. PHP fclose() 函数

    定义和用法 fclose() 函数关闭打开的文件. 该函数如果成功则返回 TRUE,如果失败则返回 FALSE. 语法 fclose(file) 参数 描述 file 必需.规定要关闭的文件. 实例 ...

  5. ZROI 提高十连测 Day1

    第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号 ...

  6. luogu 2478 [SDOI2010]城市规划 仙人掌上dp.

    LINK:城市规划 以前ls 让写的时候由于看不懂题目+以为在图中的环上dp非常困难所以放弃治疗了. 现在终于能把题目看懂了 泪目... 题目其实就是在说 给出一张图这个有一个非常好的性质 满足每个点 ...

  7. Android运行时注入浅析与使用

    背景 最近接触新项目,项目中引入了Android Annotation(AA)依赖注入开源框架,代码中大片的注解代码,对于没用过注解框架(或者说没有如此大面积的使用)的我来说确实看得很费力,于是花时间 ...

  8. RDD和Dataframe相互转换

    参考:https://www.cnblogs.com/starwater/p/6841807.html 在spark中,RDD.DataFrame.Dataset是最常用的数据类型,本博文给出笔者在使 ...

  9. 解决Jenkins的html样式不生效问题的终极方案

    本文从四个步骤来分享我们在自行搭建jenkins过程中遇到的报表样式不全(即html报告展示不正确)的问题: 1.问题现象 2.问题原因 3.问题原因补充 4.解决方法(可以直接跳到第四步解决问题) ...

  10. 【leetcode每日两题】-Day1-简单题

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素 ...