Google protobuf在python中的应用研究

软件版本

  • Python: 3.7.3
  • OS: Win7
  • protoc: 3.11.2
  • protobuf runtime library: 3.11.2
  • protobuf runtime library install method: pip
  • proto syntax: "proto2"

注意事项

  • 使用编译工具protoc编译输出的.py文件对python解释器以及对应的protobuf包都有版本要求
  • 对应的嵌套message类在赋值时需要注意要求及方法的使用
  • 因为google protobuf向前兼容,所以使用"proto2"也可以
  • 官方网站访问卡顿,下载protoc可以从maven下载1
  • python安装包也有镜像网站2
  • 关于为何使用该包可以参见3
  • google protobuf官网4

基本代码示例

	#声明消息头
 	message_head = message_pb2.MessageBase.Header()
 	#枚举的赋值值得关注
    message_head.type = message_pb2.MessageBase.SERVICE_REQ

	#声明消息体,包含了一个Alarm对象的实例
    message_body = message_pb2.MessageBase.Body()
    message_body.context.MergeFrom(alarm)

	#声明整个消息体并对其实例化,整合消息头和消息体的数据
    message = message_pb2.MessageBase()
    message.header.MergeFrom(message_head)
    message.body.MergeFrom(message_body)

总结

下图是序列化的结果
在这里插入图片描述
前期把java的跑通了,最近迷上了python,也想跑通。官方提供了上述编码中遇到的MergeFrom()方法也是个基本方法之一,注意的细节也说明了,其它问题应该都好解决。


  1. https://repo1.maven.org/maven2/com/google/protobuf/protoc/ ↩︎

  2. http://npm.taobao.org/mirrors/python/ ↩︎

  3. https://blog.csdn.net/mzpmzk/article/details/80824839 ↩︎

  4. https://developers.google.cn/protocol-buffers ↩︎

你可能感兴趣的:(数据结构)