【发布时间】:2020-12-04 08:48:48
【问题描述】:
我正在尝试发送一个 grpc 请求,并且预计会收到返回的消息流。相反,我收到的响应是 <_multithreadedrendezvous object>。谁能帮我理解为什么我会收到这个,我应该怎么做才能从这个对象中提取预期的消息。在这种情况下,服务器是 C++,客户端是 python。
【问题讨论】:
标签: grpc grpc-python
我正在尝试发送一个 grpc 请求,并且预计会收到返回的消息流。相反,我收到的响应是 <_multithreadedrendezvous object>。谁能帮我理解为什么我会收到这个,我应该怎么做才能从这个对象中提取预期的消息。在这种情况下,服务器是 C++,客户端是 python。
【问题讨论】:
标签: grpc grpc-python
请查看 gRPC 的流式 RPC 的 example。 _MultiThreadedRendezvous 对象是库对 RPC 结果的表示。它是一个可迭代的,您可以使用for 获取所有响应,也可以使用list() 获取所有消息。
【讨论】:
使用e.code() 和e.details() 帮助我解析它:
try:
response = stub.SayHello(...)
except _MultiThreadedRendezvous as e:
if e.code() == grpc.StatusCode.CANCELLED:
pass
# process cancelled status
elif e.code() == grpc.StatusCode.UNAVAILABLE and 'Connection reset by peer' in e.details():
pass
# process unavailable status
else:
raise
查看source code of that error 帮助我了解了如何解析它。
在另一个问题上感谢this answer。
【讨论】: