การทำ Timeout ให้กับโปรแกรมย่อยใน Python

By | 31/01/2018

โปรแกรมย่อยเพื่อนำไป 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/

ใส่ความเห็น