Как захватить или сохранить весь поток gRPC

Я пытаюсь написать клиент Python для прослушивания потока gRPC (пожарный шланг). Он постоянно продолжает течь. Нет никакого "по завершению".

Прото:

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

В клиенте я попытался написать следующее, но, поскольку Start rpc не возвращается «по завершении», я не получаю управление циклом for для печати (событие).

rsp = self.stub.Start(params)
for event in rsp:
    print(event)

Может кто-нибудь, пожалуйста, помогите мне с кодом Python, чтобы обрабатывать или фиксировать все события в rsp после тайм-аута (2 минуты), а затем печатать каждое событие в rsp.


person Ram    schedule 13.07.2019    source источник


Ответы (1)


У меня это работает, публикуя это на случай, если кто-то еще ищет ответ

   def collect_responses(self, response_iterator, response_queue):
      for response in response_iterator:
         response_queue.put(response)


   def call_rpc(self)
      response_stream = stub.Start(params)
      response_queue = queue.Queue()
      thread = threading.Thread(target=self.collect_responses,
                                args=(response_stream, response_queue))
      thread.start()

      time.sleep(120) # or have a different trigger to say, cancel stream

      response_stream.cancel()
      thread.join()

      while not response_queue.empty():
         item = response_queue.get()
         print(item)
person Ram    schedule 18.07.2019