丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁(yè) > 房產(chǎn)信息

repeated Python序列化protobuf中的repeated數(shù)據(jù)

最近,邊肖發(fā)現(xiàn)在服務(wù)器上做壓力測(cè)試時(shí),服務(wù)器和客戶(hù)端之間的數(shù)據(jù)傳輸是protobuf格式的。壓力測(cè)試時(shí)需要Python來(lái)序列化請(qǐng)求的protobuf數(shù)據(jù)。以前有大神做過(guò)這個(gè)工作,按照大神的腳步一步一步往下走。邊肖發(fā)現(xiàn)他的項(xiàng)目有一點(diǎn)不同:protobuf有一個(gè)重復(fù)的修飾符,用這個(gè)修飾符序列化數(shù)據(jù)有一點(diǎn)技巧。邊肖會(huì)在這里與你分享。

注:關(guān)于protobuf(Google Protocol Buffer)的基本信息,可以參考昨天另一位親愛(ài)的朋友發(fā)來(lái)的文章:protobuf的秘密。

1.關(guān)于在protobuf中重復(fù)

Repeated是protobuf中的限定修飾語(yǔ),字面意思是“repeated”。其實(shí)是用來(lái)指定某個(gè)字段可以容納多個(gè)相同類(lèi)型的數(shù)據(jù)(當(dāng)然是0或者1),相當(dāng)于C++中的vector或者Java中的List。protobuf中重復(fù)類(lèi)型數(shù)據(jù)的定義非常簡(jiǎn)單:

messagePerson{

required string name = 1;

required int 32 age = 2;

}

messageGroup{

repeatedPerson

}

相當(dāng)于C++中的向量:

classPerson

{

公共:

// balabala...

私人:

stringname

intage

}

vector<。Person>。vGroup

二、Python如何序列化重復(fù)修改的數(shù)據(jù)

在使用Python操作protobuf之前,我們需要編譯protobuf文件,讓它生成一個(gè). py文件,在操作之前把這個(gè)文件引入到我們的項(xiàng)目中。protobuf文件的編譯非常簡(jiǎn)單,只需在命令行執(zhí)行以下命令:

protoc.exe-我=。/ - python_out=。/ yourprotofile.proto

執(zhí)行后,相應(yīng)的。py文件將在當(dāng)前執(zhí)行的目錄中生成(當(dāng)然,輸出路徑可以自己指定):

yourprotofile_pb2.py

導(dǎo)入生成的。py文件導(dǎo)入到項(xiàng)目中,你可以使用Python來(lái)操作這個(gè)protobuf。

先說(shuō)如何序列化重復(fù)修飾的數(shù)據(jù)。至于反復(fù)修改的數(shù)據(jù),發(fā)現(xiàn)邊肖實(shí)施過(guò)程中有兩種情況需要處理,否則會(huì)遇到非常棘手的問(wèn)題(別問(wèn)我為什么知道,都是眼淚)。

1.1.repeated修改消息的情況

下圖是邊肖最近遇到的一個(gè). proto文件:

可以看到,在ClientRequestBody的消息體中,數(shù)據(jù)是用重復(fù)修飾符修飾的。在這種情況下,在Python中序列化時(shí),您需要做以下事情:

A.對(duì)于復(fù)合類(lèi)型(消息),調(diào)用add方法初始化一個(gè)新實(shí)例;

B.為實(shí)例中的每個(gè)元素賦值。

可以用偽代碼表示如下:

importmyproto_pb2

#初始化ClientRequestBody實(shí)例

clientRequestBody = myproto_pb2。ClientRequestBody()

#因?yàn)閿?shù)據(jù)是一個(gè)復(fù)合類(lèi)型,這里需要調(diào)用add()方法來(lái)實(shí)例化一個(gè)數(shù)據(jù)。

my data = ClientRequestBody . data . add()

#為我的數(shù)據(jù)中的每個(gè)元素賦值

mydata.py = balabala_1

mydata.word = balabala_2

...

這就完成了Python對(duì)復(fù)合peotobuf數(shù)據(jù)的操作。邊肖認(rèn)為這是一種普遍的方法。第二天遇到另一個(gè)項(xiàng)目的protobuf,直接套用上述方法,發(fā)現(xiàn)報(bào)錯(cuò)。查了一下資料,知道不是所有類(lèi)型都可以用上面的方法結(jié)算,這是第二種情況。

2 .重復(fù)修改標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型

又一個(gè)。proto文件如下所示:

你可以看到proto文件很簡(jiǎn)單,ClientRequestBody中只有一個(gè)int32類(lèi)型(相當(dāng)于C++或者Java中的int類(lèi)型)是用repeated修改的。邊肖根據(jù)上述方法調(diào)用add()方法后,系統(tǒng)會(huì)報(bào)告一個(gè)錯(cuò)誤。為什么報(bào)錯(cuò)?

事實(shí)證明,如果我們想要按照數(shù)據(jù)類(lèi)型進(jìn)行操作,我們需要實(shí)例化這個(gè)數(shù)據(jù)類(lèi)型;但是,如果要操作的數(shù)據(jù)是一個(gè)基本的數(shù)據(jù)類(lèi)型(比如本例中的int32),那么我們可以用append()方法直接追加新元素。偽碼表示如下:

importmyproto_pb2

#同樣,首先初始化ClientRequestBody實(shí)例

clientRequestBody = myproto_pb2。ClientRequestBody()

#因?yàn)槭腔緮?shù)據(jù)類(lèi)型,這里不需要實(shí)例化,直接追加數(shù)據(jù)即可

clientRequestBody.ids.append( 1)

clientRequestBody.ids.append( 2)

...

#如果ids所需的數(shù)據(jù)類(lèi)型是列表,請(qǐng)使用extend()方法

#有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)extend()和append()方法之間的區(qū)別

client RequestBody . ids . extend(list 1)

client RequestBody . ids . extend(list 2)

...

以上是邊肖近日在壓力測(cè)試中遇到的問(wèn)題及解決方法,希望能給大家提供一些幫助。

關(guān)于以上兩種序列化情況,如果有更好的解決方案或者有其他問(wèn)題,請(qǐng)?jiān)谙^(qū)留言。另外,也歡迎大家有任何關(guān)于protobuf的問(wèn)題留言,一起學(xué)習(xí)。

看完了,贊一句~嗯嗯。

1.《repeated Python序列化protobuf中的repeated數(shù)據(jù)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《repeated Python序列化protobuf中的repeated數(shù)據(jù)》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/fangchan/1649257.html

上一篇

睢寧租房信息 重磅新規(guī)!睢寧租房的不辦這件事,將被處罰!馬上就實(shí)施!

下一篇

吳麗君 《雙面膠》已經(jīng)過(guò)去13年,現(xiàn)實(shí)的主人公原型,他們一家啥結(jié)局?

地圖舌的治療方法 寶寶地圖舌莫擔(dān)心,小兒推拿有方法

  • 地圖舌的治療方法 寶寶地圖舌莫擔(dān)心,小兒推拿有方法
  • 地圖舌的治療方法 寶寶地圖舌莫擔(dān)心,小兒推拿有方法
  • 地圖舌的治療方法 寶寶地圖舌莫擔(dān)心,小兒推拿有方法

學(xué)畫(huà)汽車(chē) 如何學(xué)會(huì)畫(huà)帥的汽車(chē)手繪圖,給你個(gè)頂級(jí)簡(jiǎn)單的方法

  • 學(xué)畫(huà)汽車(chē) 如何學(xué)會(huì)畫(huà)帥的汽車(chē)手繪圖,給你個(gè)頂級(jí)簡(jiǎn)單的方法
  • 學(xué)畫(huà)汽車(chē) 如何學(xué)會(huì)畫(huà)帥的汽車(chē)手繪圖,給你個(gè)頂級(jí)簡(jiǎn)單的方法
  • 學(xué)畫(huà)汽車(chē) 如何學(xué)會(huì)畫(huà)帥的汽車(chē)手繪圖,給你個(gè)頂級(jí)簡(jiǎn)單的方法

寶寶地圖舌是什么原因 寶寶地圖舌莫擔(dān)心,小兒推拿有方法

  • 寶寶地圖舌是什么原因 寶寶地圖舌莫擔(dān)心,小兒推拿有方法
  • 寶寶地圖舌是什么原因 寶寶地圖舌莫擔(dān)心,小兒推拿有方法
  • 寶寶地圖舌是什么原因 寶寶地圖舌莫擔(dān)心,小兒推拿有方法

文件名的命名規(guī)則 提升效率的4條「文件命名」黃金規(guī)則,Office都適用

  • 文件名的命名規(guī)則 提升效率的4條「文件命名」黃金規(guī)則,Office都適用
  • 文件名的命名規(guī)則 提升效率的4條「文件命名」黃金規(guī)則,Office都適用
  • 文件名的命名規(guī)則 提升效率的4條「文件命名」黃金規(guī)則,Office都適用
檢測(cè)硬盤(pán)壞道 怎樣檢測(cè)硬盤(pán)壞道?下面五個(gè)方法教給你

檢測(cè)硬盤(pán)壞道 怎樣檢測(cè)硬盤(pán)壞道?下面五個(gè)方法教給你

在硬盤(pán)可能出現(xiàn)的諸多問(wèn)題中,硬盤(pán)的壞軌是一種難以解決的難題。很多人第一時(shí)間無(wú)法判斷硬盤(pán)是否有壞軌,以為只是普通硬盤(pán)故障,于是反復(fù)使用硬盤(pán)或者使用第三方工具修復(fù)硬盤(pán),才發(fā)現(xiàn)硬盤(pán)故障加重,數(shù)據(jù)損壞更多。那么我們用什么來(lái)檢測(cè)硬盤(pán)是否有壞軌呢?  1.聲音。硬盤(pán)工作時(shí)突然從正常的摩擦聲變成奇怪的聲...

第七次全國(guó)人口普查主要數(shù)據(jù)將公布 事件詳細(xì)經(jīng)過(guò)!

國(guó)務(wù)院新聞辦公室定于2021年5月11日10時(shí)舉行新聞發(fā)布會(huì),請(qǐng)國(guó)務(wù)院第七次全國(guó)人口普查領(lǐng)導(dǎo)小組副組長(zhǎng)、國(guó)家統(tǒng)計(jì)局局長(zhǎng)寧吉喆,國(guó)務(wù)院第七次全國(guó)人口普查領(lǐng)導(dǎo)小組辦公室主任、國(guó)家統(tǒng)計(jì)局副局長(zhǎng)李曉超,國(guó)務(wù)院第七次全國(guó)人口普查領(lǐng)導(dǎo)小組辦公室副主任、國(guó)家統(tǒng)計(jì)局總統(tǒng)計(jì)師曾玉平,國(guó)務(wù)院第七次全國(guó)人口普查領(lǐng)導(dǎo)小組辦公室副主任、國(guó)家統(tǒng)計(jì)局人口和就業(yè)統(tǒng)計(jì)司司長(zhǎng)張毅介紹第七次全國(guó)人口...

莫吉托做法 一杯莫吉托的制作方法

莫吉托做法 一杯莫吉托的制作方法

莫吉托的制作視頻 莫吉托制作配方 成分:薄荷葉,綠檸檬,百加得糖 做法:薄荷葉7/8對(duì),半個(gè)檸檬切成4塊,擠在水里,放入搖壺 一袋糖,朗姆酒45c檸檬汁15c,加冰搖勻 放在一個(gè)有一點(diǎn)薄荷葉的杯子里。...

快刷 《圣歌》快速刷等級(jí)方法分享

快刷 《圣歌》快速刷等級(jí)方法分享

《贊美詩(shī)》里很多玩家現(xiàn)在都在不斷的刷材質(zhì)和配件,但是很多玩家都不確定快速刷的方法是什么。今天,邊肖將為您帶來(lái)玩家“阿松銀月”分享的快速刷牙方法,希望對(duì)大家有所幫助。  快速刷級(jí)法分享 刷滿(mǎn)級(jí)的快速方法是無(wú)限快匹配,不做任何任務(wù)。如果想快速上升到滿(mǎn)級(jí),可以無(wú)限快速匹配。...