我试图超时运行超过3秒的功能(例如)。我正在使用信号和警报,但警报从不会触发。我想要一个适用于任何函数的超时机制。作为我面临的问题的一个例子:报警信号在无限循环中未触发
import signal
def foobar():
x = 42
while x >= 20:
if x >= 40:
x = 23
return x
def handle_alarm(*args):
print("Alarm raised")
raise TimeoutException("timeout reached")
signal.signal(signal.SIGALRM, handle_alarm)
signal.alarm(3)
try:
print(foobar())
except:
print("Exception Caught")
当运行时,我的程序运行到永远,我的处理程序永远不会运行。任何想法为什么这是这种情况?另外,如果我从foobar中删除if语句,那么闹钟会触发。
可能是一个python的bug。这在pypy下工作。我认为你应该在错误跟踪器上提交这个文件。 – simonzack 2014-10-05 05:22:20
你在使用什么操作系统?视窗? – Ewan 2014-10-05 06:23:10
@Ewan'SIGALRM'只存在于linux上。 – simonzack 2014-10-05 06:45:28