Go 和 Python 之間的 gRPC 通信

WBOY
發布: 2024-08-22 19:02:33
原創
556 人瀏覽過

gRPC Communication Between Go and Python

gRPC 是一個強大、高效能的遠端過程呼叫 (RPC) 框架,儘管不如 REST 常用,但在某些場景下提供了顯著的優勢。

此外,它與語言無關,可以在任何環境中運行,使其成為伺服器到伺服器通訊的理想選擇。

我不會深入研究它的完整解釋,但這裡是 gRPC 的一般連結。我將提供實作教學

Go gRPC 用戶端

讓我們想像一下,我們的 Go 是客戶端,但對於前端應用程式 React、Svelte 等來說,它是伺服器。

雷雷

gRPC Communication Between Go and Python


舉個例子,React 前端上傳一個文件,Go 處理它,但我們需要 Excel 的答案,我們將使用 GPT API。雖然可以用 Go 來完成,但另一方面 Python 有更多可以簡化我們生活的軟體包,例如 langchan_openai、pandas for excel 等等。


讓我們從安裝 gRPC 開始,最好是在您的 virtualenv .venv 中

雷雷

接下來你應該在你的作業系統中安裝protocol buffer,可以按照這裡進行操作。
讓我們創建一個 proto 目錄,您將在其中存儲協議緩衝區文件,我將其命名為excel.proto並貼上此:

雷雷

這個 gRPC 服務 ExcelService 允許客戶端透過傳送檔案名稱和內容來上傳檔案。伺服器以相同的文件內容進行回應。

對於 Go 來說,Python 中必須傳入 go_package ,不需要這一行。

vscode-proto3 是一個很好的擴展,如果你使用 VSCode,可以下載。

完成所有這些之後,你可以生成你的原型文件,我更喜歡它與 prot 目錄處於同一級別,為此運行以下命令:

協定 --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/excel.proto

如果成功應該產生兩個文件,如果需要大量調整,則可以選擇新增一個 Makefile 並將其定義為 proto + upper 命令。

雷雷

我們建立一個連線來監聽 50051,它將成為我們的 Python 伺服器, &pb.FileRequest 是先前使用 proto 指令產生的,現在我們正在匯入方法。如果你跑步會收到?由於Python伺服器尚未建立。

雷雷

Python gRPC 伺服器

由於 python 將充當伺服器,因此方法會略有不同,但本質上不需要套件欄位中的相同原型檔案。讓我們先建立一個沒有 gRPC 的基礎main.py,只是為了看一下 GPT 如何填充 excel 中的問題。

雷雷

這是一個簡單的腳本,可以回答 Go 發送給我們的問題,但由於專用的 openai 庫,LOC 較少,這使得它變得更容易。


我們首先添加具有與上面相同的文件的原始目錄,可以按照討論刪除選項部分。最好在您的 virtualenv 中安裝 gRPC,然後按照我運行的原型生成安裝進行操作」

雷雷

要和我的proto目錄在同一個lvl中記得加上__init.py

文件已生成,讓我們繼續。

雷雷

我們定義伺服器並新增 ExcelService 類,其中包含 proto 檔案產生的方法。因為我們按位元組接收文件,所以必須使用 io 位元組讀取器並開始進一步處理文件並填充第二列。

雷雷

最後我們將返回☝️供我們的Go客戶端接收。

為了能夠在 python 中找到 proto 文件,但是你應該定義一個導出路徑

導出 PYTHONPATH=$PYTHONPATH:mnt/c/own_dev/gRPC/server/proto

運行客戶端和伺服器

雷雷

您應該在 Go 用戶端獲得更新的 .xlsx 檔案。

結論

在本文中,我們探討了在 Python 伺服器和 Go 用戶端之間設定 gRPC 通訊的基礎知識。透過利用 gRPC,我們建立了一種無縫方式,將 Excel 文件從 Go 應用程式傳送到 Python 伺服器,使用 OpenAI 的 GPT API 處理文件,並將修改後的文件傳回 Go 用戶端。

以上是Go 和 Python 之間的 gRPC 通信的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!