Не могу получить поток GRPC - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь получить поток с какого-то сервера 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 голосов
/ 27 февраля 2019

Класс grpc._channel._Rendezvous также является итератором, вы можете проверить пример потокового RPC здесь .

Отправленный вами код является правильной реализацией.Если программа заблокирована в строке for pr in res, возможно, что сервер не отправляет никакого ответа (или занимает много времени), поэтому клиентская сторона блокируется.

...