戳藍字 「 Python都知道 」 關註 我哦!
前言
哈嘍大家好,我是了不起。
大數據開發中,除了儲存,還有個很重要的問題就是數據傳輸,怎麽去安全有效,並且有很強的拓展性去傳輸數據是非常重要,這就要說下今天的主角ProtoBuf
什麽是ProtoBuf
protocol buffers 是一種語言無關、平台無關、可延伸的序列化結構數據的方法,它可用於(數據)通訊協定、數據儲存等。
protobuf對於結構中的每個成員會提供set系列函式和get系列函式。與XML相比,protoBuf更小更快更簡單。你可以用定義protobuf的數據結構。用protobuf編譯器生成特定語言的原始碼,如C++,Java,Python等。
ProtoBuf的優點:
平台無關、語言無關
二進制、數據字描述
提供了完整詳細的操作API
高效能比XML要快20-100倍
尺寸小比XML要小3-10倍高可延伸性
數據字描述前後相容
ProtoBuf的缺點:
語言覆蓋度低,官方支持java、c++、python語言環境
自訂protobuf的工作量偏大
為什麽是ProtoBuf
ProtoBuf使用的最佳場景,就是制定協定。
只要只官方支持的語言環境,只需要制定一套協定,大家可以各自生成自己的解析工具,接收到協定後進行解析。
協定也是支持變更的,在一定情況下,也不會影響低版本的協定解析,所以一方針對某些場景進行升級時,不用通知所有的終端,只需要相應有依賴的終端進行升級即可。
ProtoBuf的數據是用二進制儲存的,本身相比json或者xml數據儲存就小,如果再加上壓縮,那會更加降低頻寬。
如何使用ProtoBuf
首先,需要安裝protobuf庫:
pip install protobuf
接著,需要編寫.proto檔定義數據結構,比如定義一個簡單的訊息:
syntax = "proto3";
package test;
message Person {
int32 id = 1;
string name = 2;
int32 age = 3;
}
然後,根據.proto檔生成對應的Python程式碼:
protoc --proto_path=. --python_out=. persion.proto
這樣就生成了一個Python檔persion_pb2.py,裏麵包含與訊息相關的、自動生成的程式碼。
接下來就可以在Python中使用protobuf了:
import persion_pb2
# 建立一個Person例項
person = persion_pb2.Person()
person.id = 123
person.name = "Jack"
person.age = 18
# 將Person序列化成二進制數據
data = person.SerializeToString()
# 將二進制數據反序列化成Person物件
new_person = persion_pb2.Person()
new_person.ParseFromString(data)
# 輸出Person物件的內容值
print(new_person.id)
print(new_person.name)
print(new_person.age)
輸出結果:
123 Jack 18
這就是使用protobuf在Python中進行序列化和反序列化操作了。
總結
今天給大家帶來的是在Python中使用ProtoBuf,在日常開發中面對接收數據後進行清洗或者處理等會經常用到。
如果您喜歡我的文章,可以持續關註,後續文章更精彩,敬請期待。
PS : Python都知道技術交流群(技術交流、摸魚、白嫖課程為主)又不定時開放了,感興趣的朋友,可以在下方公號內回復: 666 ,即可進入。
老規矩 ,道友們還記得麽, 右下角的 「在看」 點一下 , 如果感覺文章內容不錯的話,記得分享朋友圈讓更多的人知道!