【问题标题】:what is _MultiThreadedRendezvous in grpc and how to parse it什么是 grpc 中的 _MultiThreadedRendezvous 以及如何解析它
【发布时间】:2020-12-04 08:48:48
【问题描述】:

我正在尝试发送一个 grpc 请求,并且预计会收到返回的消息流。相反,我收到的响应是 <_multithreadedrendezvous object>。谁能帮我理解为什么我会收到这个,我应该怎么做才能从这个对象中提取预期的消息。在这种情况下,服务器是 C++,客户端是 python。

【问题讨论】:

    标签: grpc grpc-python


    【解决方案1】:

    请查看 gRPC 的流式 RPC 的 example_MultiThreadedRendezvous 对象是库对 RPC 结果的表示。它是一个可迭代的,您可以使用for 获取所有响应,也可以使用list() 获取所有消息。

    【讨论】:

    • 您分享的内容真的很有帮助。但有时我没有收到来自该迭代器的消息,有时我会收到。你有没有经历过。 @lidi
    • 有很多可能导致这种行为。一般情况下,客户端应该会收到对等端发送的所有消息。如果您认为这是 gRPC 库中的错误,请创建复制案例并向github.com/grpc/grpc/issues提交问题。
    • 不用担心。我不认为这是由于 grpc 库。我的代码出了点问题。
    【解决方案2】:

    使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 2019-01-31
      • 2020-11-29
      • 2010-11-22
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多