起因
google的官方文件和國內多數文件把Protobuf介紹得過於複雜,對於部分初學者不方便上手,為此寫了這個由淺入深的教程。
安裝以ubuntu 20.04為例
# apt install protobuf-compiler# pip install protobuf
快速上手
谷歌Protobuf是一種快速有效地將結構化資料序列化為二進位制資料流的方法,它被設計用於機器間通訊和遠端過程呼叫(RPC)。它被設計用於機器間通訊和遠端過程呼叫(RPC remote procedure calls )。
定義協議檔案 metric.protomessage 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"
最新評論