【发布时间】: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 似乎也没有帮助。
我能做些什么来防止产量挂起或设置某种超时以使产量最终结束吗?非常感谢任何帮助/建议。
【问题讨论】: