使用装饰器
可以使用第三方库如`timeout_decorator`来创建装饰器,用于限制函数的运行时间。
import time
import timeout_decorator
@timeout_decorator.timeout(6) 设置超时时间为6秒
def justtest():
time.sleep(5)
return 5
aaa = justtest()
print(aaa) 如果函数运行时间超过6秒,将抛出异常
使用`eventlet`库
`eventlet`库提供了`Timeout`类,可以用于设置函数运行的超时时间。
import time
import eventlet
eventlet.monkey_patch() 用于兼容旧式Python代码
with eventlet.Timeout(3, False): 设置超时时间为3秒
time.sleep(4) 如果运行时间超过3秒,将抛出异常
使用`retrying`库
`retrying`库可以用于在函数执行超时时自动重试。
import time
import eventlet
from retrying import retry
eventlet.monkey_patch()
class RetryTimeOutException(Exception):
pass
@retry(stop_max_attempt_number=3, wait_fixed=2000)
def retry_fun():
raise RetryTimeOutException("超时异常")
try:
retry_fun()
except RetryTimeOutException:
print("函数执行超时,正在重试...")
使用`signal`模块
可以使用`signal`模块来处理超时信号,但这通常用于Unix-like系统。
使用第三方HTTP库
当处理网络请求时,可以使用如`requests`库,并设置`timeout`参数来限制请求时间。
import requests
url = 'https://www.baidu.com'
headers = {}
try:
response = requests.get(url, headers=headers, timeout=3) 设置超时时间为3秒
except requests.exceptions.Timeout:
print("请求超时")
选择合适的方法取决于你的具体需求和应用场景。如果你需要处理的是函数级别的超时,装饰器可能是最简单直接的解决方案。如果你需要处理的是更广泛的应用级别超时,比如网络请求的超时,那么使用第三方HTTP库可能更加合适。