您现在的位置是:网站首页> 编程资料编程资料
Python控制线程和函数超时处理_python_
2023-05-26
323人已围观
简介 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:

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中的opencv 图像梯度_python_
- Pytest框架 conftest.py文件的使用详解_python_
- Python线程池thread pool创建使用及实例代码分享_python_
- python中opencv 直方图处理_python_
- python argparse模块传参用法实例_python_
- Python数据分析Numpy中常用相关性函数_python_
- 利用Python改正excel表格数据_python_
- python中open函数对文件处理的使用教程_python_
- pytest官方文档解读Fixture errors抛错解决_python_
- 3段Python图像处理的实用代码的分享_python_
