python gRPC 客户端在服务器流响应时断开连接

python gRPC client disconnect while server streaming response

美好的一天,

这是我第一次 post 如果我在 post 上做错了,请原谅我。 我正在尝试获取订阅类型服务 运行,该服务在客户端断开连接之前一直运行良好。根据时间的不同,这可以正常工作或无限期地阻塞。

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

我能做些什么来防止 yield 挂起或设置某种超时以使 yield 最终结束?非常感谢任何 help/advice。

如果其他人遇到过这个问题,那么这里就不是真正的问题。我错误地认为这是阻塞,因为 none 我放入打印进度的代码正在打印。

实际上,当客户端断开连接并且服务器试图产生异常时,抛出...它不是常规 "Exception",或 "SystemExit",或 "SystemError".不完全确定异常类型是什么,但如果您在 "finally" 中执行任何需要的清理,代码确实会正确退出。