在Python 3.4裡使用Protobuf 2.6

來源:互聯網
上載者:User

標籤:milang   python   

在開發領域裡,協議的使用是經常的事情,只要通訊的地方,就要使用到。比如用戶端與伺服器通訊,比如嵌入式系統與上位機系統通訊,
比如不同進程之間進行資料通訊,這些地方都需要使用。但協議的定義的方式也有很多種,最常使用就是開發人員自己定義的格式,也有使用
XML等格式,不過這兩種方式都存在不足之處的。首先來看自己定義的格式,如果採用二進位的方式,要調試協議格式,要處理不同的位置,
要處理動態增加的欄位等等,另外還要考慮到相容舊的協議的問題,這樣會隨著著維護時間越長,就要使用越來越多時間。其次,使用XML的
方式理解和調試都很方便,但會帶來通訊量比較大的問題,速度比較低一些。特別在中國目前電腦的配置水平還是比較低下的工廠,或者在嵌入
式系統為了降低成本而使用的低效能CPU,這樣對使用者體驗就會比較差。通過這個對比,使用protobuf是使用比較明智的,因為它是使用二進位
編碼,這樣通訊的資料包相對來說比較小,而相容性、動態性也不用考慮,這個庫本身已經定義好,另外它還支援多種開發語言使用同一
個協議的情況。不過,這個庫在這之前,主要支援Python 2.7版本,不支援Python 3.0以後的版本,如果想在Python 3.4裡使用,就需要針對
它的python代碼進行修改才可以使用。


1. 從官網下載源碼包解壓進入vsproject,使用visual studio 開啟解決方案,選擇protoc產生解決方案會在Release目錄下產生protoc.exe。
2. 進入python目錄 執行python setup.py build 然後執行python setup.py install。
3. 把它解壓在目錄C:\Python34\Lib\site-packages裡。

4. 編寫proto檔案,內容如下:

message testinfo  {         required int32 devtype = 1;    required int32 devid = 2;    required int32 unitid = 3;    required int32 chlid = 4;            optional int32 testid = 5 [default = 0];        required bytes stepdata = 6; }

把它命名為:test2.proto。
 
5. 把test2.proto轉換為py檔案:
protoc.exe --python_out=.\ test2.proto
這樣就會組建檔案test2_pb2.py。


6. 建立test2.py檔案來測試協議檔案 test2_pb2.py。
內容如下:

import test2_pb2import systestinfo = test2_pb2.testinfo()testinfo.devtype = 100testinfo.devid = 2testinfo.unitid = 3testinfo.chlid = 4testinfo.testid = 200testinfo.stepdata = b‘abc‘print(testinfo, testinfo.devtype)out = testinfo.SerializeToString()print(out)decode = test2_pb2.testinfo()decode.ParseFromString(out)print(decode)


運行結果如下顯示:
>>> 
devtype: 100
devid: 2
unitid: 3
chlid: 4
testid: 200
stepdata: "abc"
 100
b‘\x08d\x10\x02\x18\x03 \x04(\xc8\x012\x03abc‘
devtype: 100
devid: 2
unitid: 3
chlid: 4
testid: 200
stepdata: "abc"


>>> 

7. 在整個測試中,會發現很多protobuf裡的py代碼並不能運行,因此需要一個一個錯誤進行修改,主要有如下幾方面:
1)long改為int
2) unicode改為str
3) basestring改為str
4) from cStringIO import StringIO改為from io import StringIO 
5) xrange改為range
6) iteritems改為items
7) except UnicodeDecodeError, e:改為except UnicodeDecodeError as e:
主要就是參考從py2轉換為py3的資料,就基本上可以修改完成。

蔡軍生 QQ:9073204  深圳

在Python 3.4裡使用Protobuf 2.6

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.