gevent.Timeout没有提出

时间:2013-03-28 20:29:29

标签: python network-programming timeout gevent monkeypatching

我有一个服务器在一个部分中执行“某些东西”,并且我有一个“with gevent.Timeout(5)”。我在另一个greenlet中进行了一些检查,并且通过它我注意到其中一个做了“某些东西”的greenlets运行了45分钟。我不得不最终重启程序来杀死它(我知道杀死它的其他方法,但这不是问题......)。

我也使用gevent.monkey.patch_all()进行修补。 “一些东西”部分确实涉及网络连接,我猜测某些东西卡在其中一个地方。我不明白为什么没有引发超时异常。有谁知道为什么gevent.Timeout异常可能没有被提出?

1 个答案:

答案 0 :(得分:0)

每当我使用gevent.Timeout时,我也将它用作上下文管理器,但使用第二个参数False。这样,上下文管理器就可以抑制任何异常,只留下代码块。您可以通过检查块是否成功设置值来跟进:

result = None
with gevent.Timeout(5, False):
    # Something that stalls

if result == None:
    # Take care of business

这对我非常可靠。似乎默认的第二个参数exceptiongevent.TimeoutNone - 您是否尝试将其替换为您自己的异常类型?甚至是Exception

相关问题