Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Python3でgRPCをつかう その1:準備

gRPCはGoogleによって開発された、異なるデバイスやアプリケーション間で関数や手続きを呼び出すための*1フレームワークです。
HTTP/2を利用してバイナリ形式でデータをやり取りすることで、アプリケーション間を低遅延で安定した通信網でつなぐ事ができます。
modbusのような産業用通信でもバイナリ形式を使いますが、gRPCのソレはネットワーク内の機器間の通信に加えて、同一PC内のアプリケーション疎通などにも利用できます。
Googleでは内部リソース間のやり取りで広く採用されいるそうです。
また、面白いところだとArduinoのCLIインターフェイスの実装でも使われています。

実際のところ

環境構築

$ pip install grpcio
$ pip install grpcio-tools

Protocol Bufferファイル

gRPCはメッセージ内容をProtocol Bufferファイルちうので定義します。
ROSのmsgみたいなモンでしょうか。

以下の内容で"helloworld.proto"を作成

syntax = "proto3";

package helloworld;

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

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

protocol buffer ファイルをコンパイルする

protocol bufferは"protobufコンパイラ"なるモノをつかって
ベースとなるクライアントとサーバーを用意します。
modbusのようなバイナリで通信するので、それの元となるデータ群はコンパイルせんといかんのですね。

変換コマンドは次の通り

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

やってみると、pythonファイルが二つ追加されることがわかります。

$ ls
helloworld.proto  helloworld_pb2.py  helloworld_pb2_grpc.py

*1: リモートプロシージャコール(RPC)