无法接收GRPC流

时间:2019-02-26 14:01:27

标签: python-2.7 iterator grpc

我正在尝试从某些GRPC服务器接收流,我无法访问其代码。

这是我的GRPC客户端的代码:

class Client():
    def __init__ (self, grpcIP, grpcPort, params):
        self.channel = grpc.insecure_channel('%s:%d' % (grpcIP, grpcPort))
        grpc.channel_ready_future(self.channel).result()
        self.stub = pb2_grpc.DataCloneStub(self.channel)
        self.params = params
        self.host = grpcIP
    def StartSender(self):
        params = pb2.StartParameters(**self.params)
        try:
            res = self.stub.Start(params)
            print(type(res))
            for pr in res:
                print(pr.current_progress)
        except grpc.RpcError as e:
            print(e)

以下是使用的原始文件中的片段。 方法:

rpc Start (StartParameters) returns (stream Progress) {}

流中的消息:

    message Progress {
      double current_progress = 1;
      uint64 total_sent = 2;
      uint64 total_size = 3;
      string file_name = 4;
      Error error = 5;
   }

据我了解,self.stub.Start(params)应该返回带有Progress类型对象的迭代器。问题是它返回的类型为grpc._channel._Rendezvous。我无法遍历整个响应。它也不会捕获任何异常。

有人经历过这种行为吗?问题可能不是来自客户端吗?

1 个答案:

答案 0 :(得分:0)

grpc._channel._Rendezvous也是一个迭代器,您可以检查流式RPC示例here

您发布的代码是正确的实现。如果程序在for pr in res行被阻止,则服务器可能没有发送任何响应(或花费很长时间),因此客户端被阻止了。