python如何判断一段代码运行是否超出一定时间,如果超出则抛出异常?(检测函数运行是否超时,规定时间内执行,限制时间)eventlet模块 (eventlet.timeout.Timeout)

必须要用到多线程来监控吗?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

经检验,一切正常!

也可以套一个try…except,并将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:
    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只是常规错误的基类)

你可能感兴趣的:(Python)