我的代码可能有无限循环。我希望能够在代码中阻止它,是否有一些可以做到这一点?有点像:
for i to range(0,5):
timer = on
run(x)
#while run is running
if timer.time > 30:
exit run(x)
print("out of time ")
print(timer.time)
因此输出可能是:3,2,时间30,2,超出时间30
我担心这可能需要线程,我在C和Java中尝试过,但是从来没有python。
答案 0 :(得分:3)
一些选择:
run
的“无限”循环,请检查时间。这可能是最简单的。signal.alarm
和SIGALRM
处理程序在一段固定的时间后中断。run
时才能使用。run
生成到一个单独的进程中,并在时间到期时终止该进程(例如使用multiprocessing
)。以下是使用signal.alarm
中断计算的示例:
import signal
class TimeoutException(Exception):
pass
def alarm_handler(*args):
raise TimeoutException()
def tryrun(func, timeout=30):
oldhandler = signal.signal(signal.SIGALRM, alarm_handler)
try:
signal.alarm(timeout)
func()
except TimeoutException:
print "Timeout"
else:
print "Success"
finally:
signal.alarm(0) # disarm alarm
signal.signal(signal.SIGALRM, oldhandler)
import time
tryrun(lambda: time.sleep(10), 5) # prints Timeout
tryrun(lambda: time.sleep(2), 5) # prints Success