我遵循this解。在
我试图为我的函数during runtime设置超时秒数,这使我能够灵活地传递不同的timeout seconds,甚至不打开脚本(测试.py)在
在超时.py在from functools import wraps
import errno
import os
import signal
class TimeoutError(Exception):
pass
def timeout(seconds=60, error_message=(os.strerror(errno.ETIMEDOUT)).upper()):
def decorator(func):
def _handle_timeout(signum, frame):
raise TimeoutError(error_message)
def wrapper(*args, **kwargs):
signal.signal(signal.SIGALRM, _handle_timeout)
#print "Timeout seconds =: " , seconds
signal.alarm(seconds)
try:
result = func(*args, **kwargs)
finally:
signal.alarm(0)
return result
return wraps(func)(wrapper)
return decorator
在主.py(只接受运行时传递的任何参数)
^{pr2}$
在测试.py在from timeout import timeout
from timeout import TimeoutError
#@timeout(30)
@timeout() #
def func(args1,args2,timeout_sec):
#do something
要运行此程序:python main.py abc abc 45 #this overrids seconds from timeout.py
在测试.pytimeout()或timeout(30)可以工作,但是有没有什么方法可以使它成为动态的,并在@timeout(arg3)中以“arg3”的形式传递秒数
我有什么办法可以做到这一点吗?在