必须要用到多线程来监控吗?python有没有内置方法?
有的,找到了!
参考文章:python函数执行超时后跳过
# -*- encoding: utf-8 -*-
"""
@File : 20200310_python_test.py
@Time : 2020/3/10 23:29
@Author : Dontla
@Email : [email protected]
@Software: PyCharm
"""
import time
import eventlet # 导入eventlet这个模块
eventlet.monkey_patch() # 必须加这条代码
with eventlet.Timeout(2, False): # 设置超时时间为2秒
print('这条语句正常执行')
time.sleep(4)
print('没有跳过这条输出')
print('跳过了输出')
结果:
D:\20191031_tensorflow_yolov3\python\python.exe D:/old/20200310_python_test/20200310_python_test.py
这条语句正常执行
跳过了输出
Process finished with exit code 0
经检验,一切正常!
# -*- encoding: utf-8 -*-
"""
@File : 20200310_python_test.py
@Time : 2020/3/10 23:29
@Author : Dontla
@Email : [email protected]
@Software: PyCharm
"""
import time
import eventlet # 导入eventlet这个模块
eventlet.monkey_patch() # 必须加这条代码
try:
with eventlet.Timeout(2, False): # 设置超时时间为2秒
try:
time.sleep(4)
# 该语句正常执行
except Exception:
raise
except Exception:
print(Exception)
好像不行哎,没法正常检测到异常
这是正常执行,不会报异常的!!
需要这样,将Timeout()中的参数改为True:
# -*- encoding: utf-8 -*-
"""
@File : 20200310_python_test.py
@Time : 2020/3/10 23:29
@Author : Dontla
@Email : [email protected]
@Software: PyCharm
"""
import time
import eventlet # 导入eventlet这个模块
eventlet.monkey_patch() # 必须加这条代码
try:
# Dontla 20200421 超时将抛出异常
with eventlet.Timeout(2, True): # 设置超时时间为2秒
time.sleep(4)
print('程序运行未超时!')
except eventlet.timeout.Timeout:
# except: # (或,两种都行,注意不能用except Exception,因为Exception是异常基类,我们这个超时异常未包含在它里面)
print('程序运行超时!')
运行结果:
程序运行超时!
# -*- encoding: utf-8 -*-
"""
@File : 20200310_python_test.py
@Time : 2020/3/10 23:29
@Author : Dontla
@Email : [email protected]
@Software: PyCharm
"""
import time
import eventlet # 导入eventlet这个模块
eventlet.monkey_patch() # 必须加这条代码
try:
# Dontla 20200421 超时将抛出异常
with eventlet.Timeout(5, True): # 设置超时时间为5秒
time.sleep(4)
print('程序运行未超时!')
except eventlet.timeout.Timeout:
# except: # (或,两种都行,注意不嫩用except Exception,因为Exception是异常基类,我们这个超时异常未包含在它里面)
print('程序运行超时!')
运行结果:
程序运行未超时!
参考文章:python异常类型(Exception只是常规错误的基类)