1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
import signal import time import traceback
def timeout_handler(signum, frame): print(signum) print(frame) print("timeout") raise Exception("timeout")
def timeout1(fun): def wapper(*args, **kwagrs): signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(-1) return fun(*args, **kwagrs)
return wapper
def timeout(time_s=0): def wrapper(fun): def _wrapper(*args, **kwagrs): signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(time_s) return fun(*args, **kwagrs)
return _wrapper
return wrapper
@timeout(0) def test1(name): print("test1 start") print(name) time.sleep(2) print("test1 end") return "test1"
@timeout(2) def test2(): print("test2 start") time.sleep(3) print("test2 end") return "test2"
@timeout(4) def test3(): print("test3 start") time.sleep(4) print("test3 end") return "test4"
def test4(): try: signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(3) print("test4 start") time.sleep(4) print("test4 end") signal.alarm(0) except Exception: print(traceback.format_exc())
if __name__ == '__main__': print(test1("aaaa")) print(test2()) print(test3()) test4()
|