第4回は、Pythonでストリーミング型のgRPCサービスを開発してみます。ここでは、幾つかあるストリーミング型のうち、サーバからの複数レスポンスとなるサーバサイドストリーミングを実装してみます。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
今回のテーマは、Pythonによるサーバサイドストリーミング型のgRPCサービスです。そのために、まずはサーバサイドストリーミングについておさらいしましょう。gRPCでは、以下の4つの通信方式を使うことができます。
このうち、サーバサイドストリーミングとは、図1のように一つのリクエストに対して複数のレスポンスが返る通信方式です。例えば、一つの検索リクエストに対して複数の検索結果が返ってくるイメージです。
複数の検索結果を受け取るには、レスポンスのメッセージにrepeatedキーワードを付与して配列にする方法があります。ただし、この場合はあくまでも一つのメッセージであることには変わりがないので、全てのメッセージを受け取るまでプログラムの実行がブロックされてしまいます。メッセージのサイズによってはパフォーマンスに悪影響が出ることが考えられます。
ストリーミングを指定することで、個々のメッセージは非同期に受け取るようになります。大量のメッセージの受け取りでも処理待ちを最小限に抑えることで、パフォーマンスの悪化を防ぐことができます。
開発に必要な環境を準備しておきます。macOSを基本に解説しますが、Windowsにも必要に応じて触れます。なお、あくまでも学習用としての位置付けなので、サーバとクライアントは同じホストに配置することにして、開発環境は共通とします。
本連載で共通で使用するコードエディタVisual Studio Code(以降、VSCode)と、汎用(はんよう)のgRPCクライアントであるEvansをインストールしておいてください。VSCodeでは、拡張機能「Python」のインストールもおすすめします。Evansのインストールと利用方法は、連載第2回を参照してください。
Pythonの実行環境を用意します。gRPCの公式サイトによると、gRPCの利用が可能なPythonインタープリタとpip(パッケージマネジャー)の本稿作成時点におけるバージョンは以下の通りです。
これらがインストールされていないか、バージョンが古い場合には最新バージョンをインストールしてください。バージョンは、それぞれ以下のように確認できます(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のバージョンを確認してください。
Copyright © ITmedia, Inc. All Rights Reserved.