我試圖超時運行超過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