Fast-GRPC: 用python輕鬆開發grpc介面

taogeYT發表於2023-05-15

簡介

Fast-GRPC 旨在幫助開發者更加輕鬆快捷地使用 Python 開發 gRPC 介面。它的特點包括簡化步驟、簡單上手、快速開發,同時支援非同步和同步程式碼,以及支援 Middleware,靈感來自FastAPI。

安裝

需要python 3.7+

pip install python-fast-grpc

快速上手

下面是一個簡單的 Fast-GRPC 示例,展示如何建立一個 gRPC 服務

from fast_grpc import BaseSchema, FastGRPC, ServicerContext, method

app = FastGRPC()

class HelloRequest(BaseSchema):
    name: str

class HelloReply(BaseSchema):
    message: str

class Greeter:
    @method("SayHello", request_model=HelloRequest, response_model=HelloReply)
    async def say_hello(self, request: HelloRequest, context: ServicerContext) -> HelloReply:
        return HelloReply(message=f"Greeter SayHello {request.name}")

app.add_service(Greeter)  # 新增Greeter服務
# 啟動 gRPC 服務。無需手動編寫 proto 檔案,Fast-GRPC 會根據你的 Python 程式碼自動生成 proto 檔案,並編譯為 Python gRPC 程式碼,最後啟動 gRPC 服務
app.run()

在上面的示例中,我們首先使用 FastGRPC 建立了一個 gRPC 應用。接下來,定義了一個 gRPC 服務 Greeter,使用 method 裝飾器標記了一個 RPC 方法 say_hellomethod 接受三個引數:RPC 方法名、請求模型 HelloRequest 和響應模型 HelloReplysay_hello 方法可以支援同步和非同步程式碼,對於同步程式碼,會使用執行緒來模擬非同步執行。

最後,我們將 Greeter 服務新增到 gRPC 應用中,並透過 run 方法啟動 gRPC 伺服器。Fast-GRPC 會根據新增的 Greeter 服務的介面定義自動生成 .proto 檔案和 Python gRPC 程式碼,簡化了 Python gRPC 的開發步驟,更符合 Python 的使用習慣。

接下來,我們透過一個客戶端呼叫來演示效果:

import grpc
import greeter_pb2 as pb2
import greeter_pb2_grpc as pb2_grpc

channel = grpc.insecure_channel("127.0.0.1:50051")
stub = pb2_grpc.GreeterStub(channel)
response = stub.SayHello(pb2.HelloRequest(name="fastGRPC"))
print("Greeter client received: ", response)

相關連結

Fast-GRPC GitHub 倉庫

下一步計劃

目前,Fast-GRPC 支援的功能還比較簡單,未來將繼續改進和完善。如果您有任何建議或意見,請不要猶豫,歡迎提交 issue 或者 PR。

相關文章