自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

師父給了我一個(gè) .proto 文件,我應(yīng)該怎么使用?

開發(fā) 前端
當(dāng)我們拿到一個(gè).proto文件,需要去調(diào)用gRPC 服務(wù)時(shí),我們一般有如下步驟。

回想我年輕的時(shí)候,在做一個(gè)項(xiàng)目時(shí),需要計(jì)算斐波那契數(shù)列第 n 項(xiàng)的值。但是我只會(huì)使用遞歸來(lái)實(shí)現(xiàn)。眾所周知,遞歸算法計(jì)算斐波那契數(shù)列的效率極差,速度極慢。

于是我求助于當(dāng)時(shí)我的師父,問(wèn)他有沒有辦法幫我解決這個(gè)問(wèn)題。

[[350118]]

我?guī)煾刚f(shuō):“有啊,我寫過(guò),但是代碼是用C++ 寫的,你估計(jì)看不懂。不過(guò)沒關(guān)系,你用 Python 直接調(diào)用就可以了。”

我很驚訝:“用 Python 直接調(diào)用C++代碼嗎?看起來(lái)似乎很麻煩啊。”

師父說(shuō):“一點(diǎn)也不麻煩。我給你一個(gè).proto 文件和一個(gè)地址,你拿去自動(dòng)生成代碼就能調(diào)用了。”

于是,我拿到了一個(gè)mentors_secret.proto文件,里面的內(nèi)容非常簡(jiǎn)單:

  1. syntax = "proto3"
  2.  
  3.  
  4. message NumToCalc { 
  5.     int32 num = 1
  6.  
  7.  
  8. message Result { 
  9.     int32 result = 1
  10.     string msg = 2
  11.     bool success = 3
  12.  
  13.  
  14. service MentorsSecret { 
  15.     rpc CalcFib(NumToCalc) returns (Result) {} 

還有一個(gè)地址:122.51.39.219:8766。

原來(lái)是使用 gRPC 啊。這樣我就知道怎么做了。

安裝環(huán)境

首先,我們先安裝Python 版本的gRPC:

  1. pip install grpcio grpcio-tools 

生成代碼

接下來(lái),基于這個(gè)mentors_secret.proto文件,自動(dòng)生成代碼。cd進(jìn)入mentors_secret.proto文件所在的文件,執(zhí)行下面的命令:

  1. python3 -m grpc_tools.protoc -I . --python_out=. --grpc_python_out=. ./mentors_secret.proto 

此時(shí),可以看到當(dāng)前文件夾中生成了兩個(gè)文件:mentors_secret_pb2.py和mentors_secret_pb2_grpc.py。

如下圖所示:

這兩個(gè)文件的內(nèi)容,不需要看。

調(diào)用遠(yuǎn)程服務(wù)

接下來(lái),創(chuàng)建一個(gè)新文件,叫做client.py,用來(lái)調(diào)用遠(yuǎn)程的函數(shù):

  1. import grpc 
  2. from mentors_secret_pb2 import NumToCalc 
  3. from mentors_secret_pb2_grpc import MentorsSecretStub 
  4.  
  5.  
  6. channel = grpc.insecure_channel('122.51.39.219:8766') 
  7. stub = MentorsSecretStub(channel) 
  8.  
  9. result = stub.CalcFib(NumToCalc(num=36)) 
  10. print('斐波那契數(shù)列第36像是:', result.result) 

代碼加上空行總共只有10行。1-3行導(dǎo)入模塊,6,7行創(chuàng)建遠(yuǎn)程鏈接。第9行調(diào)用遠(yuǎn)程的函數(shù)。第10行打印結(jié)果。

我們來(lái)看看運(yùn)行效果:

運(yùn)行結(jié)果秒出。

總結(jié)

當(dāng)我們拿到一個(gè).proto文件,需要去調(diào)用gRPC 服務(wù)時(shí),我們一般有如下步驟:

(1) 自動(dòng)生成mentors_secret_pb2.py和mentors_secret_pb2_grpc.py文件。

(2) 查看.proto文件里面,service后面的名字MentorsSecret,如下圖所示:

(3) 編寫固定的代碼:

  1. import grpc 
  2. from mentors_secret_pb2_grpc import MentorsSecretStub # service 名字后面加上 Stub 
  3.  
  4.  
  5. channel = grpc.insecure_channel('遠(yuǎn)程服務(wù)地址和 端口') 
  6. stub = MentorsSecretStub(channel) 

(4) 調(diào)用遠(yuǎn)程函數(shù)。通過(guò).proto文件,可以知道遠(yuǎn)程函數(shù)CalcFib接收一個(gè)參數(shù)NumToCalc,所以把它導(dǎo)入進(jìn)來(lái):from mentors_secret_pb2 import NumToCalc,它里面的參數(shù)為num,所以調(diào)用遠(yuǎn)程服務(wù)時(shí)賦值:

  1. para = NumToCalc(num=36
  2. calc_result = stub.CalcFib(para) 

(5) 從.proto知道返回的結(jié)果是Result里面的result屬性。于是打印calc_result.result獲得結(jié)果。

 

責(zé)任編輯:趙寧寧 來(lái)源: 未聞Code
相關(guān)推薦

2021-10-04 18:44:06

Linux MintFedora操作系統(tǒng)

2022-08-14 09:00:00

JWT 令牌憑證微服務(wù)

2021-05-21 14:26:18

ObjectMap前端

2024-03-18 00:01:00

按鈕鏈接元素

2022-02-22 20:35:22

公鑰私鑰數(shù)據(jù)

2022-03-07 05:53:41

線程CPU代碼

2022-08-29 08:28:58

JS對(duì)象數(shù)組

2015-11-06 10:14:36

APP虛擬服務(wù)器

2017-05-02 10:13:46

2013-05-21 09:32:11

ChromebookChrome OS

2021-09-02 07:04:38

JWT簽名算法

2009-03-18 13:12:36

程序員技術(shù)IT行業(yè)

2020-09-15 12:59:48

KotlinFlutter移動(dòng)

2018-10-16 09:55:24

Linux發(fā)行版內(nèi)核

2013-05-13 10:24:44

谷歌開發(fā)團(tuán)隊(duì)開發(fā)管理

2014-07-22 10:51:02

密碼安全

2012-11-28 13:25:27

程序員

2020-06-02 09:22:45

腳本CPUDDG

2009-04-13 08:46:07

蓋茨慈善夢(mèng)想

2023-12-26 18:47:32

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)