首頁>技術>

起因

google的官方文件和國內多數文件把Protobuf介紹得過於複雜,對於部分初學者不方便上手,為此寫了這個由淺入深的教程。

安裝

以ubuntu 20.04為例

# apt  install protobuf-compiler# pip install protobuf
快速上手

谷歌Protobuf是一種快速有效地將結構化資料序列化為二進位制資料流的方法,它被設計用於機器間通訊和遠端過程呼叫(RPC)。它被設計用於機器間通訊和遠端過程呼叫(RPC remote procedure calls )。

定義協議檔案 metric.proto
message Metric {  required string name = 1;  required string type = 2;  required float value = 3;  repeated string tags = 4;}
生成python協議程式碼
$ protoc --python_out=. metric.proto[libprotobuf WARNING google/protobuf/compiler/parser.cc:562] No syntax specified for the proto file: metric.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)$ ls metric*.pymetric_pb2.py

可以看到已經生成檔案metric_pb2.py,裡面的內容通常不需要關心。

序列化
import metric_pb2my_metric = metric_pb2.Metric()my_metric.name = 'sys.cpu'my_metric.type = 'gauge'my_metric.value = 99.9my_metric.tags.extend(['my_tag', 'foo:bar'])with open('out.bin', 'wb') as f:    f.write(my_metric.SerializeToString())

上面的程式碼將protobuf流寫入磁碟上的二進位制檔案out.bin。

反序列化
import metric_pb2with open('out.bin', 'rb') as f:    read_metric = metric_pb2.Metric()    read_metric.ParseFromString(f.read())    print(read_metric)

執行結果:

$ python pb_unpack.py name: "sys.cpu"type: "gauge"value: 99.9000015258789tags: "my_tag"tags: "foo:bar"

22
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 如何快速上手 angular.js