设定运行时间上限

目录

使用场景

signal

方法

func_timeout

方法

eventlet

方法

参考


使用场景

在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博客

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值