โปรแกรมย่อยเพื่อนำไป track function ทีเราต้องการทำ timeout
[cc lang=”python”]
import signal
class TimedOutExc(Exception):
pass
def deadline(timeout, *args):
def decorate(f):
def handler(signum, frame):
raise TimedOutExc()
def new_f(*args):
signal.signal(signal.SIGALRM, handler)
signal.alarm(timeout)
return f(*args)
signa.alarm(0)
new_f.__name__ = f.__name__
return new_f
return decorate
[/cc]
การใช้งาน
กำหนดให้ทำงานได้ไม่เกิน 5 วินาที
[cc lang=”python”]
@deadline(5)
def take_a_long_time():
while(True):
pass
try:
take_a_long_time()
except TimedOutExc as e:
print “took too long”
[/cc]
ที่มา: https://www.filosophy.org/post/32/python_function_execution_deadlines__in_simple_examples/