美好的一天,
这是我的第一次发帖,如果我对发帖做错了,请原谅。 我正在尝试运行订阅类型服务,该服务可以正常工作,直到客户端断开连接为止。根据时间的不同,它可以正常工作或无限期阻塞。
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的新手,所以可能有些地方我做错了,但是我的主要问题是,如果客户端在产生收益之前/期间断开连接,则代码会无限期地挂起。我已经尝试了一些方法来摆脱这种情况,但是它们只能工作几次。在客户端设置的超时不会倒计时,但是当倒计时达到0时收益不会结束。回调发生得很好,但是context.cancel和context.abort似乎也无济于事。
我有什么办法可以防止收益率挂起或设置某种超时,以使收益率最终终止?任何帮助/建议,我们将不胜感激。
答案 0 :(得分:0)
如果其他任何人遇到此问题,则这里实际上没有问题。我错误地认为这是阻塞的,因为我在打印进程中输入的代码都没有打印。
实际上,当客户端断开连接并且服务器尝试产生异常时……它不是一般的“异常”,“ SystemExit”或“ SystemError”。不能完全确定为此使用什么异常类型,但是如果您在“ finally”中执行所需的任何清理操作,则代码会正确退出。