python @timeout装饰器
时间: 2023-10-04 13:07:25 浏览: 127
timeout-decorator:Python的超时装饰器
`@timeout` 是一个自定义装饰器,用于给函数添加超时功能。在 Python 中,可以使用 `signal` 模块来实现超时功能。下面是一个简单的实现示例:
```python
import signal
class TimeoutError(Exception):
pass
def timeout(seconds):
def decorator(func):
def wrapper(*args, **kwargs):
def handle_timeout(signum, frame):
raise TimeoutError("Function call timed out")
# 设置信号处理函数
signal.signal(signal.SIGALRM, handle_timeout)
# 设置超时时间
signal.alarm(seconds)
try:
result = func(*args, **kwargs)
finally:
# 取消超时
signal.alarm(0)
return result
return wrapper
return decorator
```
使用示例:
```python
@timeout(5) # 设置超时时间为5秒
def my_function():
# 执行耗时操作,可能会超时
pass
try:
my_function()
except TimeoutError as e:
print(e) # 处理超时异常
```
这样,在 `my_function` 执行时间超过 5 秒时,将会抛出 `TimeoutError` 异常。
阅读全文