Python中的gRPC簡化指南

2022-03-03 03:16:17 字數 3731 閱讀 9163

google的

grpc

提供了用於實現rpc(遠端過程呼叫)工作流的框架。

通過在http / 2

之上分層

並使用協議緩衝區

,grpc有望比傳統的rest + json api帶來很多好處。

讓我們建立乙個

我們想要公開(

遠端呼叫

)的函式(

過程)— square_root,位於calculator.py中

import

math

defsquare_root(x):

y =math.sqrt(x)

returnyif

__name__ == '

__main__':

print(square_root(16))

square_root接受輸入x,並將平方根返回為y。

本文的其餘部分將重點介紹如何通過grpc公開square_root。

協議緩衝區

是一種語言中立的機制,用於序列化結構化資料。

使用它需要明確定義值及其資料型別。

讓我們建立calculator.proto

,它定義我們的服務要使用的訊息和服務結構

syntax = "

proto3";

message number

service calculator

}

您可以考慮以下訊息和服務定義:

此部分可能

是整個過程中

最「黑匣子」的

部分。我們將使用特殊的工具來自動生成類。

執行這些命令時,將遵循某些命名約定生成新檔案(和類)。

$ pip install grpcio

$ pip install grpcio-tools

$ python -m grpc_tools.protoc -i. --python_out=. --grpc_python_out=. calculator.proto

生成的檔案如下:

calculator_pb2.py  —包含訊息類

calculator_pb2_grpc.py  —包含伺服器和客戶端類

現在,我們擁有建立grpc伺服器calc_server.py

所需的所有元件,

如下所示。

內聯注釋應解釋每個部分。

import

grpc

from concurrent import

futures

import

time

#import the generated classes

from example import

calculator_pb2, calculator

from example import

calculator_pb2_grpc

#建立乙個類來定義伺服器功能

#派生自calculator_pb2_grpc.calculatorservicer

class

calculatorservicer(calculator_pb2_grpc.calculatorservicer):

#公開 calculator.square_root

#請求和響應屬於資料型別,生成calculator_pb2.number

defsquareroot(self, request, context):

response =calculator_pb2.number()

response.value =calculator.square_root(request.value)

return

response

#建立乙個grpc伺服器

server = grpc.server(futures.threadpoolexecutor(max_workers=10))

#使用生成的函式`add_calculatorservicer_to_server`

#將定義的類新增到建立的伺服器

calculator_pb2_grpc.add_calculatorservicer_to_server(calculatorservicer(), server)

#listen on port 50051

print('

starting server. listening on port 50051.')

server.add_insecure_port(

'[::]:50051')

server.start()

#server.start不會阻塞,新增了乙個睡眠迴圈以保持

try:

while

true:

time.sleep(86400)

except

keyboardinterrupt:

server.stop(0)

我們可以使用以下命令啟動伺服器,

$ python calc_server.py
starting server. listening on port 50051.
現在我們有了乙個grpc伺服器,監聽埠50051。

完成伺服器設定後,我們建立calc_client.py

-僅呼叫函式並列印結果。

import

grpc

from example import

calculator_pb2

from example import

calculator_pb2_grpc

#開啟乙個grpc通道

channel = grpc.insecure_channel('

localhost:50051')

#建立乙個存根(客戶端)

stub =calculator_pb2_grpc.calculatorstub(channel)

#建立有效的請求訊息

number = calculator_pb2.number(value=16)#呼叫

response =stub.squareroot(number)

print(response.value)

在伺服器已經偵聽的情況下,我們只需執行客戶端即可。

$ python calc_client.py

4.0

以下是每個檔案的用途。

basic-grpc-python/

├── example/calculator.py #包含函式的模組

|├── example/calculator.proto # protobuf定義檔案

|├── example/calculator_pb2_grpc.py # 為伺服器/客戶端生成的類

├── example/calculator_pb2.py # 生成的訊息類

|├── server/calc_server.py # 伺服器

└── client/calc_client.py # 客戶端

這篇文章使用乙個

非常簡單的示例將乙個函式轉換為乙個遠端過程,只是在表面上做文章。

當然,grpc可以在更高階的模式(

請求流,響應流,雙向流)中

使用,並具有其他功能,例如錯誤處理和身份驗證。

**參考:

Python中的gRPC簡化指南

google的grpc提供了乙個框架,用於實現rpc 遠端過程呼叫 工作流。通過在http 2上分層並使用協議緩衝區,grpc有望比傳統的rest json api帶來很多好處。這篇文章試圖從頭開始,採用python實現乙個簡單的功能,並通過grpc介面提供服務。因此,讓我們開始學習構建。讓我們建立...

python中grpc配置asyncio使用

安裝grpclib pip3 install grpclib protoc編譯.proto檔案,生成原始碼檔案 python m grpc tools.protoc i.python out grpclib python out helloworld.proto grpclib github官網 h...

python在Linux中實現GRPC簡單命令

先確認安裝python3後安裝grpc pip install grpcio pip install protobuf pip install grpcio tools2.編輯或使用服務方提供的 proto檔名.proto 檔案 3.編譯 proto檔名.proto 檔案 python m grpc...