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

By | 31/01/2018

โปรแกรมย่อยเพื่อนำไป track function ทีเราต้องการทำ timeout

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

การใช้งาน
กำหนดให้ทำงานได้ไม่เกิน 5 วินาที

1
2
3
4
5
6
7
8
9
@deadline(5)
def take_a_long_time():
  while(True):
    pass

try:
  take_a_long_time()
except TimedOutExc as e:
  print "took too long"

ที่มา: https://www.filosophy.org/post/32/python_function_execution_deadlines__in_simple_examples/

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *