首页 > 解决方案 > 如何捕获或保存所有 gRPC 流

问题描述

我正在尝试编写一个 python 客户端来监听 gRPC 流(消防水带)。它不断地流式传输。没有“完成时”。

原型:

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

在客户端中,我尝试编写以下内容,但由于 Start rpc 未返回“完成”,因此我无法控制 for 循环进行打印(事件)。

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

有人可以帮我用python代码在超时(2分钟)后处理或捕获rsp中的所有事件,然后在rsp中打印每个事件。

标签: pythongrpc-python

解决方案


我得到了这个工作,如果其他人正在寻找答案,请发布这个以防万一

   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)

推荐阅读