Python 运行一个函数执行,当函数执行超过30秒,就结束个函数并执行后面的代码
时间: 2024-10-23 12:13:27 浏览: 25
Python装饰器限制函数运行时间超时则退出执行
在Python中,你可以利用`signal`模块和装饰器来实现这样的功能。下面是一个简单的例子,展示了如何使用信号处理(SIGALRM)中断长时间运行的函数:
```python
import signal
def timeout_handler(signum, frame):
raise TimeoutError("Function execution timed out after 30 seconds")
def run_with_timeout(func, *args, **kwargs):
# 设置信号处理程序
signal.signal(signal.SIGALRM, timeout_handler)
# 设置超时时长为30秒
signal.alarm(30) # 如果函数在此时还没有完成,就会发送SIGALRM信号
try:
# 执行函数
result = func(*args, **kwargs)
except TimeoutError as e:
print(f"Timeout: {e}")
# 在捕获到异常后,清除信号以便后续代码不受影响
signal.alarm(0)
return None # 或者返回默认值、抛出异常或其他适当的处理方式
finally:
# 确保无论是否发生超时,信号都会被清理
signal.alarm(0)
# 函数正常执行完毕,返回结果
return result
# 示例函数
def long_running_function():
# 这里模拟一个可能会阻塞的任务
time.sleep(60)
# 调用函数,并设置超时
result = run_with_timeout(long_running_function)
#
阅读全文