Python控制线程或函数超时处理+实例代码展示

简介: Python控制线程或函数超时处理+实例代码展示

前言


在我们使用线程池控制线程运行时,或者是写爬虫时不停发送request获取地址,都需要我们对运行的线程加以控制。有这样一种场景,当你写入一条网站请求时,该线程一直请求并没有回应导致线程造成堵塞,浪费珍贵的线程资源。当你写入一条错误的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:

a2bc902eb91949bdbe6dff53f611dd7c.png

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

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

439f1c1086ea416ab76fc27b911a72db.png

当我们想要调用子程序该函数是不起作用的。

像这样,该函数没有效果,这时候我们需要使用第二种方法。


c8b0f6a5081e4455b7742a46d135479e.png


二、func-timeout


1.安装


直接安装就好了

pip install func-timeout


或者直接在Github上面下载: GitHub-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:

31f67e8f7bc144548999ac70b8aa24ad.png

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.

目录
相关文章
|
1天前
|
监控 数据可视化 Java
Python中的线程池与进程池
【5月更文挑战第19天】本文探讨Python中提高程序性能的关键——线程池和进程池。线程池与进程池是并行编程工具,有效利用多核处理器,加速程序执行。线程是运算调度单位,进程是资源分配和调度基础。线程池与进程池管理线程和进程,减少创建销毁开销。
8 0
|
1天前
|
Python
|
2天前
|
算法 数据可视化 数据处理
Python基础教程——函数
Python基础教程——函数
|
2天前
|
Python
Python基础 笔记(九) 函数及进阶
Python基础 笔记(九) 函数及进阶
22 6
|
2天前
|
Python
Python基础 笔记(三) 标识符、输入输出函数
Python基础 笔记(三) 标识符、输入输出函数
17 7
|
3天前
|
Python
Python 新版本有75个内置函数,你不会不知道吧(1)
Python 新版本有75个内置函数,你不会不知道吧(1)
Python 新版本有75个内置函数,你不会不知道吧(1)
|
3天前
|
算法 程序员 Python
年底工资总结,实例教你用Python计算个税 依法纳税做好公民(1)
年底工资总结,实例教你用Python计算个税 依法纳税做好公民(1)
|
5天前
|
程序员 开发者 Python
Python中的装饰器:优雅而强大的函数修饰工具
在Python编程中,装饰器是一种强大的工具,它可以简洁地实现函数的增强、扩展和重用。本文将深入探讨Python中装饰器的工作原理、常见应用场景以及如何自定义装饰器,帮助读者更好地理解和运用这一重要的编程概念。
|
6月前
|
C++ Python
54 python - 类属性、实例属性
54 python - 类属性、实例属性
25 0
|
9月前
|
Python
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
53 0