我有一个服务器在一个部分中执行“某些东西”,并且我有一个“with gevent.Timeout(5)”。我在另一个greenlet中进行了一些检查,并且通过它我注意到其中一个做了“某些东西”的greenlets运行了45分钟。我不得不最终重启程序来杀死它(我知道杀死它的其他方法,但这不是问题......)。
我也使用gevent.monkey.patch_all()进行修补。 “一些东西”部分确实涉及网络连接,我猜测某些东西卡在其中一个地方。我不明白为什么没有引发超时异常。有谁知道为什么gevent.Timeout异常可能没有被提出?
答案 0 :(得分:0)
每当我使用gevent.Timeout
时,我也将它用作上下文管理器,但使用第二个参数False
。这样,上下文管理器就可以抑制任何异常,只留下代码块。您可以通过检查块是否成功设置值来跟进:
result = None
with gevent.Timeout(5, False):
# Something that stalls
if result == None:
# Take care of business
这对我非常可靠。似乎默认的第二个参数exception
到gevent.Timeout
是None
- 您是否尝试将其替换为您自己的异常类型?甚至是Exception
?