from:https://stackoverflow.com/questions/366682/how-to-limit-execution-time-of-a-function-call-in-python
當有些函數執行時間過長,影響整個程序運行時,可以使用此方法進行限制,超時會報錯。
from __future__ import with_statement # Required in 2.5
import signal
from contextlib import contextmanager
class TimeoutException(Exception): pass
@contextmanager
def time_limit(seconds):
def signal_handler(signum, frame):
raise TimeoutException, "Timed out!"
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(seconds)
try:
yield
finally:
signal.alarm(0)
try:
with time_limit(10):
long_function_call()
except TimeoutException, msg:
print "Timed out!"