【问题标题】:python gRPC client disconnect while server streaming responsepython gRPC客户端在服务器流式响应时断开连接
【发布时间】:2020-07-22 05:10:20
【问题描述】:

早安,

这是我第一次发帖,如有错误请见谅。 我正在尝试运行订阅类型的服务,该服务在客户端断开连接之前可以正常工作。根据时间的不同,这可以正常工作或无限期地阻塞。

def Subscribe(self, request, context):
    words = ["Please", "help", "me", "solve", "my", "problem", "!"] 

    while context.is_active():
        try:
            for word in words:
                event = fr_pb2.Event(word=word)
                if not context.is_active():
                    break
                yield event
                print (event)                    
        except Exception as ex:
            print(ex)
            context.cancel()

    print("Subscribe ended")

我是 gRPC 的新手,所以我可能做错了一些事情,但我的主要问题是,如果客户端在 yield 发生之前/期间断开连接,代码将无限期挂起。我已经尝试了一些方法来摆脱这种情况,但它们只在某些时候起作用。在客户端设置的超时确实倒计时,但是当倒计时达到 0 时,产量并没有结束。回调发生得很好,但是 context.cancel 和 context.abort 似乎也没有帮助。

我能做些什么来防止产量挂起或设置某种超时以使产量最终结束吗?非常感谢任何帮助/建议。

【问题讨论】:

    标签: python stream grpc yield


    【解决方案1】:

    如果其他人遇到这个问题,这里没有问题。我错误地认为这是阻塞的,因为我输入的用于打印进度的代码都没有打印。

    实际上,当客户端断开连接并且服务器尝试产生异常时……它只是不是一般的“异常”、“系统退出”或“系统错误”。不完全确定异常类型的用途是什么,但是如果您在“最终”中进行所需的任何清理,代码确实会正确退出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2015-01-15
      • 1970-01-01
      • 2014-11-04
      相关资源
      最近更新 更多