目录
使用场景
在python脚本运行的过程中,可能会出现运行到某处长时间卡住不再运行的问题。遇到这种情况就需要设定运行时间上限,如果出现上述问题即可跳过处理。
signal
使用signal有所限制,需要在linux系统上,并且需要在主线程中使用。这个模块不需要安装。
方法
import signal
def handle(signum,frame):
raise RuntimeError
def func(args):
'''自定义函数'''
return
try:
signal.signal(signal.SIGALRM,handle) # 注册 signal.SIGALRM's handler
signal.alarm(runtime) # 10秒后向进程发送SIGALRM信号
func(args) # 运行的函数
except RuntimeErroras e:
print("运行超时")
func_timeout
使用python第三方 func_timeout 模块中提供的 func_set_timeout 装饰器可以非常简单的设置python程序的超时时间,超时后程序抛出 func_timeout.exceptions.FunctionTimedOut 异常。此时再用 try-except 做异常处理即可。
安装:
pip install func_timeout -i https://pypi.tuna.tsinghua.edu.cn/simple
方法
import time
import func_timeout
from func_timeout import func_set_timeout
@func_set_timeout(5) # 设置函数最大执行时间
def test_time_out(num):
for i in range(10):
print(i)
time.sleep(1)
if __name__ == '__main__':
try:
test_time_out(5)
except func_timeout.exceptions.FunctionTimedOut:
print("超时了,自动退出")
eventlet
eventlet在python3下可用,该方法只要进行了子程序调用就失效了。
安装:
pip install eventlet -i https://pypi.tuna.tsinghua.edu.cn/simple
方法
import requests
import eventlet
import time
eventlet.monkey_patch()
time_limit = 3 #set timeout time 3s
with eventlet.Timeout(time_limit,False):
time.sleep(5)
r=requests.get("https://me.csdn.net/dcrmg", verify=False)
print('error')
参考
python之为函数执行设置超时时间(允许函数执行的最大时间)[python第三方库func_timeout]_51CTO博客_python给函数设置超时时间
python限制函数运行时间,超时退出 - sin涛涛 - 博客园 (cnblogs.com)
(45条消息) python装饰器限制函数运行时间,超时退出_-牧野-的博客-CSDN博客
(45条消息) Python控制线程或函数超时处理+实例代码展示_python 线程 超时_fanstuck的博客-CSDN博客