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

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

本文介绍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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。