Python控制线程和函数超时处理

小林子
小林子
发布时间:2026-10-15 | 6人浏览过
原创

本文介绍Python中控制线程运行时间的两种方法。首先分析使用eventlet库进行超时控制的局限性,指出其无法作用于子程序调用的问题。接着详细演示func-timeout库的安装与使用,通过@func_set_timeout修饰器实现函数级别的超时控制,并结合try-except处理超时异常,确保程序稳定性。

前言

在使用线程池管理线程或编写爬虫持续发送请求获取地址时,必须对运行中的线程进行有效控制。例如,当发起一个网站请求而该请求长时间无响应时,会导致线程堵塞,从而浪费宝贵的线程资源。同样,如果执行一条错误的SQL查询语句且该语句耗时过长,也会阻塞其他查询任务。面对此类情况,必须对线程实施控制,以提升程序脚本的稳定性。

控制线程运行时间的方法有多种:

本文介绍两种方法:一种是使用eventlet库,但该方法在子程序调用时会失效;另一种是使用@func_set_timeout修饰器,该方法可应用于函数、线程等各类子函数,是最为便捷、简单且高效的方式。下面将通过代码演示这两种方法的操作过程。

一、Eventlet

该库可以直接下载:

pip install eventlet
import time
import eventlet#导入eventlet
eventlet.monkey_patch()#引入patch
with eventlet.Timeout(2,False):#设置超时时间为2秒
    time.sleep(3)
    print('1')
print('2')

我们设定睡眠时间为3秒,超过了2秒,这样会导致print('1')这条语句执行跳过,直接输出2:

import time
import eventlet#导入eventlet
eventlet.monkey_patch()#引入patch
with eventlet.Timeout(2,False):#设置超时时间为2秒
    time.sleep(1)
    print('1')
print('2')

当我们修改time.sleep为1小于2时,并没有超时,此时应该输出1、2:

当我们想要调用子程序该函数是不起作用的。像这样,该函数没有效果,这时候我们需要使用第二种方法。

二、func-timeout

1.安装

直接安装就好了

pip install func-timeout

2.使用

一般是和try except一起用,超时则扔出错误。

from func_timeout import func_set_timeout
import func_timeout
@func_set_timeout(1)#设定函数超时执行时间
def task(i):
    time.sleep(2)
    print(i)
try:
    task(1)
except:
    print(2)

这时候sleep时间超过1应该输出2:

from func_timeout import func_set_timeout
import func_timeout
@func_set_timeout(3)#设定函数超时执行时间
def task(i):
    time.sleep(2)
    print(i)
try:
    task(1)
except:
    print(2)

这样就输出为1.

到此这篇关于Python控制线程和函数超时处理的文章就介绍到这了,更多相关Python控制线程 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表