0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gRPC + Python 備忘録(カスタムクラス、ストリーミングなど)

Posted at

概要

いつまで経っても一向に覚えられない、でも重要な
gRPC + Python の細かい実装のところを備忘録としてまとめます。

モデルがdefault型のrepeatedプロパティ を持つ時

Proto定義

syntax = "proto3";

message MyModel{
    int32 size = 1;
    repeated bytes data = 2;
}

例えば上のような時です。
今回はMyModelというモデルが、bytesという型をrepeated の形で保持しています。
つまりbytes のリストをMyModel が所持する形です。

呼び出し方


obj = MyModel()
obj.size = 4
obj.data[:] = [byte0, byte1, ... ]

というように書きます。

モデルが カスタム型のプロパティ を持つ時

Proto定義

syntax = "proto3";

message MyData{
    double data = 1;

}
message MyModel{
    int32 size = 1;
    MyData data = 2;
}

呼び出し方


obj = MyModel()
obj.size = 4
obj.data.CopyFrom(MyData(data=2.0))

というように書きます。

ストリームの書き方

Proto定義

syntax = "proto3";

service MyService{
  rpc test(stream MyModel) returns (stream MyModel) {};
}

のように書きます。

呼び出し方(送信側)


def make_stream_data(xs, size=100):
    while len(xs) > 0:
        if len(xs) < size:
            pb_return = MyModel()
            pb_return.data[:] = xs
            del xs[:len(xs)]

            yield pb_return

        pb_return = MyModel()
        pb_return.data[:] = xs[:size]
        del xs[:size]
        yield pb_return

のようなヘルパー関数を書いておき、


stream = make_stream_data(data)
res = stub.test(stream)

というように書きます。

注意

このとき、注意点として、

with grpc.insecure_channel(self.address) as channel:
    stub = MyStub(channel)
    res = stub.test(
        stream
    )

と書くと、SOCKET CLOSED となるので注意です。
上記のように、

res = stub.test(stream)

という呼び出し方にしましょう。

呼び出し方(受信側)

受け取る時は、

stream_list = []
for el in request:
    stream_list = stream_list + list(el.data)

のように書き、stream_list に対して処理を実行します。

まとめ

gRPC + Python はプロトタイプを作る多くの場面で使用する可能性が高いので、
基本的な使い方はテンプレ化しておいて、サクッと作りたいですね。

今回はこの辺で。

@kenmaro

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?