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" 中执行任何需要的清理,代码确实会正确退出。
美好的一天,
这是我第一次 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" 中执行任何需要的清理,代码确实会正确退出。