为Python函数添加超时时间的方法,可以使用Python标准库signal
和threading
,其中signal
是Linux/Mac下的信号处理模块,threading
是Python线程模块。以下是添加Python函数超时时间的两种方法:
方法一:使用signal模块
1.导入signal模块
import signal
2.设置signal信号处理函数timeout_handler
,用于在函数超时时抛出TimeoutError
异常
def timeout_handler(signum, frame):
raise TimeoutError('Function is timeout!')
3.为函数添加装饰器@timeout(sec)
,参数sec
是超时时间(秒)
def timeout(sec):
def decorator(func):
def _func(*args, **kwargs):
signal.signal(signal.SIGALRM, timeout_handler) # 设置信号处理函数
signal.alarm(sec) # 设置定时器
try:
result = func(*args, **kwargs)
finally:
signal.alarm(0) # 关闭定时器
return result
return _func
return decorator
4.使用@timeout(sec)
为函数添加超时时间
@timeout(5) # 设置5秒超时
def slow_function(x):
time.sleep(x)
return x
方法二:使用threading模块
1.导入threading模块
import threading
2.定义新类TimeoutException
,用于在函数超时时抛出TimeoutError
异常
class TimeoutException(Exception):
pass
3.为函数添加装饰器@timeout(sec)
,参数sec
是超时时间(秒)
def timeout(sec):
def decorator(func):
def _func(*args, **kwargs):
def thread_func():
result[0] = func(*args, **kwargs)
result = [None]
t = threading.Thread(target=thread_func)
t.start()
t.join(sec)
if t.is_alive():
raise TimeoutException('Function is timeout!')
return result[0]
return _func
return decorator
4.使用@timeout(sec)
为函数添加超时时间
@timeout(5) # 设置5秒超时
def slow_function(x):
time.sleep(x)
return x
以上两种方法都可以为Python函数添加超时时间,需要根据个人需要选择合适的方法。另外需要注意的是,两种方法均不能使用在Windows系统上,因为Windows系统不支持signal
模块和Unix信号机制。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在 Linux/Mac 下为Python函数添加超时时间的方法 - Python技术站