【发布时间】:2014-10-05 04:05:30
【问题描述】:
如果某个函数运行时间超过 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 错误。这在 pypy 下有效。我认为您应该将其提交到错误跟踪器。
-
你在什么操作系统上运行它?窗户?
-
@Ewan
SIGALRM只存在于 linux 上。
标签: python python-2.7