クイックスタート

このガイドでは、簡単な動作例を使用して、PythonでのgRPCの使用方法を説明します。

クイックスタート

このガイドでは、簡単な動作例を使用して、PythonでのgRPCの使用方法を説明します。

前提条件

  • Python 3.7以降
  • pip バージョン9.0.1以降

必要に応じて、pipのバージョンをアップグレードしてください。

$ python -m pip install --upgrade pip

システム所有のインストールのためにpipをアップグレードできない場合は、virtualenvでサンプルを実行できます。

$ python -m pip install virtualenv
$ virtualenv venv
$ source venv/bin/activate
$ python -m pip install --upgrade pip

gRPC

gRPCのインストール

$ python -m pip install grpcio

または、システム全体にインストールするには

$ sudo python -m pip install grpcio

gRPCツール

PythonのgRPCツールには、プロトコルバッファコンパイラprotocと、.protoサービス定義からサーバーおよびクライアントコードを生成するための特別なプラグインが含まれています。 クイックスタートの最初の部分では、helloworld.protoからサーバーとクライアントのスタブを既に生成していますが、残りのクイックスタート、後のチュートリアル、および独自のプロジェクトにはツールが必要です。

gRPCツールをインストールするには、以下を実行します。

$ python -m pip install grpcio-tools

サンプルのダウンロード

このクイックスタートを進めるには、サンプルコードのローカルコピーが必要です。 GitHubリポジトリからサンプルコードをダウンロードします(次のコマンドはリポジトリ全体を複製しますが、このクイックスタートやその他のチュートリアルにはサンプルのみが必要です)。

# Clone the repository to get the example code:
$ git clone -b v1.62.0 --depth 1 --shallow-submodules https://github.com/grpc/grpc
# Navigate to the "hello, world" Python example:
$ cd grpc/examples/python/helloworld

gRPCアプリケーションの実行

examples/python/helloworldディレクトリから

  1. サーバーを実行します

    $ python greeter_server.py
    
  2. 別のターミナルから、クライアントを実行します

    $ python greeter_client.py
    

おめでとうございます! gRPCを使用してクライアントサーバーアプリケーションを実行しました。

gRPCサービスの更新

次に、クライアントが呼び出すことができるサーバーに追加メソッドを追加してアプリケーションを更新する方法を見てみましょう。 gRPCサービスはプロトコルバッファを使用して定義されています。.protoファイルでサービスを定義する方法の詳細については、gRPCの概要基本チュートリアルを参照してください。 現時点では、サーバーとクライアントの「スタブ」の両方に、クライアントからHelloRequestパラメータを受け取り、サーバーからHelloReplyを返すSayHello RPCメソッドがあり、このメソッドは次のように定義されていることを知る必要があります。

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

これを更新して、Greeterサービスに2つのメソッドを持たせましょう。examples/protos/helloworld.protoを編集し、同じリクエストとレスポンスタイプを持つ新しいSayHelloAgainメソッドで更新します。

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Sends another greeting
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

ファイルを保存することを忘れないでください!

gRPCコードの生成

次に、アプリケーションで使用されるgRPCコードを更新して、新しいサービス定義を使用する必要があります。

examples/python/helloworldディレクトリから、以下を実行します。

$ python -m grpc_tools.protoc -I../../protos --python_out=. --pyi_out=. --grpc_python_out=. ../../protos/helloworld.proto

これにより、生成されたリクエストとレスポンスクラスを含むhelloworld_pb2.pyと、生成されたクライアントとサーバーのクラスを含むhelloworld_pb2_grpc.pyが再生成されます。

アプリケーションの更新と実行

これで、新しい生成されたサーバーとクライアントコードができましたが、サンプルアプリケーションの人間が記述した部分で新しいメソッドを実装して呼び出す必要があります。

サーバーの更新

同じディレクトリで、greeter_server.pyを開きます。 新しいメソッドを次のように実装します。

class Greeter(helloworld_pb2_grpc.GreeterServicer):

    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message=f"Hello, {request.name}!")

    def SayHelloAgain(self, request, context):
        return helloworld_pb2.HelloReply(message=f"Hello again, {request.name}!")
...

クライアントの更新

同じディレクトリで、greeter_client.pyを開きます。 新しいメソッドを次のように呼び出します。

def run():
    with grpc.insecure_channel('localhost:50051') as channel:
        stub = helloworld_pb2_grpc.GreeterStub(channel)
        response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'))
        print("Greeter client received: " + response.message)
        response = stub.SayHelloAgain(helloworld_pb2.HelloRequest(name='you'))
        print("Greeter client received: " + response.message)

実行!

以前と同様に、examples/python/helloworldディレクトリから

  1. サーバーを実行します

    $ python greeter_server.py
    
  2. 別のターミナルから、クライアントを実行します

    $ python greeter_client.py
    

次のステップ

最終更新日:2023年9月7日: Format python snippets (#1187) (e76a103)