Python控制线程和函数超时处理
作者:fanstuck 发布时间:2023-12-18 05:47:48
标签: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.
来源:https://jxnuxwt.blog.csdn.net/article/details/125065832


猜你喜欢
- 目录配置连接池SetMaxOpenConns方法SetMaxIdleConns方法SetConnMaxLifetime方法SetConnMa
- 我就废话不多说了,大家还是直接看代码吧!#! usr/bin/python3.5# -*- coding:utf-8 -*-a = inpu
- 注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存
- python 实现pacs功能 推送下拉影像dcmtk关联pacs技术笔记:简介1、dcmtk关联pacs的参数介绍2、dcmtk命令介绍3
- 什么是闭包:闭包是一个存在内部函数的引用关系。该引用指向的是外部函数的局部变量对象(前提是内部函数使用了外部函数的局部变量)闭包的作用:延长
- WSGI协议首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python
- PDOStatement::fetchObjectPDOStatement::fetchObject — 获取下一行并作为一个对象返回。(P
- my.ini 是啥玩意?my.ini是MySQL数据库中使用的配置文件,修改这个文件可以达到更新配置的目的。my.ini 在哪放着呢?my.
- 1、引言小丝:鱼哥,2023年了, 你有啥愿望啊?小鱼:这, 我可以选择不告诉你吗?小丝:可以选择不告诉我,但是,你自己憋着,不难受吗?小鱼
- 本文实例总结了Python多进程并发与多线程并发。分享给大家供大家参考,具体如下:这里对python支持的几种并发方式进行简单的总结。Pyt
- PDO::commitPDO::commit提交一个事务(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)说
- 适配竖屏横向尺度,禁止出现横向滚屏常规QVGA机型竖屏状态下,14号字体,单行仅显示13.5个字。资讯频道的新闻短标题要控制在13字以内才能
- 阿里云提供了基于命名空间的 V2 版 SDK,但是文档不是很完整,使用门槛比较高,于是我封装了一个 Composer 包:https://g
- 在上一个文章里写了关于左(右)侧定宽右(左)侧自动缩放的两列浮动,这个文章就要说一下三列浮动的问题了。在之前说过,两列浮动是其他多列浮动的基
- 这一篇复习一下ECMAScript规范中的基础语法,英文好的朋友可以直接阅读官方文档。JavaScript本质上也是一种类C语言,熟悉C语言
- Python使用QRCode模块生成二维码QRCode官网https://pypi.python.org/pypi/qrcode/5.1简介
- 基本环境配置python 3.6pycharmrequestsparseltime相关模块pip安装即可确定目标网页数据哦豁,这个价格...
- 本文实例讲述了Python3模拟登录操作。分享给大家供大家参考,具体如下:模拟登录_要求:1. 用户输入账号密码进行登录2. 用户信息保存在
- zip()的作用先看一下语法:zip(iter1 [,iter2 [...]]) —> zip objectPython的内置help
- 1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建