PythonでgRPCサービスを開発する――サーバサイドストリーミングとは?:スキマ時間にこっそり学ぶ「gRPC」入門(4)
第4回は、Pythonでストリーミング型のgRPCサービスを開発してみます。ここでは、幾つかあるストリーミング型のうち、サーバからの複数レスポンスとなるサーバサイドストリーミングを実装してみます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
サーバサイドストリーミングとは
今回のテーマは、Pythonによるサーバサイドストリーミング型のgRPCサービスです。そのために、まずはサーバサイドストリーミングについておさらいしましょう。gRPCでは、以下の4つの通信方式を使うことができます。
- Unary……1リクエストに1レスポンスが返る
- クライアントサイドストリーミング……複数リクエストに対して1レスポンスが返る
- サーバサイドストリーミング……1リクエストに複数レスポンスが返る
- 双方向ストリーミング……複数リクエストに複数レスポンスが返る
このうち、サーバサイドストリーミングとは、図1のように一つのリクエストに対して複数のレスポンスが返る通信方式です。例えば、一つの検索リクエストに対して複数の検索結果が返ってくるイメージです。
複数の検索結果を受け取るには、レスポンスのメッセージにrepeatedキーワードを付与して配列にする方法があります。ただし、この場合はあくまでも一つのメッセージであることには変わりがないので、全てのメッセージを受け取るまでプログラムの実行がブロックされてしまいます。メッセージのサイズによってはパフォーマンスに悪影響が出ることが考えられます。
ストリーミングを指定することで、個々のメッセージは非同期に受け取るようになります。大量のメッセージの受け取りでも処理待ちを最小限に抑えることで、パフォーマンスの悪化を防ぐことができます。
開発のための準備
開発に必要な環境を準備しておきます。macOSを基本に解説しますが、Windowsにも必要に応じて触れます。なお、あくまでも学習用としての位置付けなので、サーバとクライアントは同じホストに配置することにして、開発環境は共通とします。
VSCodeとEvansをインストールしておく
本連載で共通で使用するコードエディタVisual Studio Code(以降、VSCode)と、汎用(はんよう)のgRPCクライアントであるEvansをインストールしておいてください。VSCodeでは、拡張機能「Python」のインストールもおすすめします。Evansのインストールと利用方法は、連載第2回を参照してください。
Pythonをインストールする
Pythonの実行環境を用意します。gRPCの公式サイトによると、gRPCの利用が可能なPythonインタープリタとpip(パッケージマネジャー)の本稿作成時点におけるバージョンは以下の通りです。
- Python 3.7以降(非同期サポートが必要なため)
- pip 9.0.1以降
これらがインストールされていないか、バージョンが古い場合には最新バージョンをインストールしてください。バージョンは、それぞれ以下のように確認できます(python3コマンドかpythonコマンド。以降も同様)。
% python3 --version Python 3.10.8 % python3 -m pip --version pip 22.2.2 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)
Pythonのインストールは、macOSではHomebrewの利用をおすすめします(pipも同時にインストールされます)。Windowsでは、pythonコマンドによるMicrosoft Storeからのインストールを利用できます(ただしWindows 10以降)。PowerShellなどで「python」コマンドを実行すると、Microsoft Storeアプリが起動してPython 3.10の入手画面になるので、[入手]ボタンのクリックでインストールできます(こちらでもpipが同時にインストールされます)。
インストールしたら、念のために上記コマンドでPythonとpipのバージョンを確認してください。
gRPCライブラリとツールをインストールする
Copyright © ITmedia, Inc. All Rights Reserved.