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

 更新时间:2022年06月02日 11:56:58   作者:fanstuck  
这篇文章主要介绍了Python控制线程和函数超时处理,文中利用两种方法进行eventlet库和@func_set_timeout修饰器,文章具体详细介绍,需要的小伙伴可以参考一下

前言

在我们使用线程池控制线程运行时,或者是写爬虫时不停发送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控制线程 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pygame游戏之旅 python和pygame安装教程

    pygame游戏之旅 python和pygame安装教程

    这篇文章主要为大家详细介绍了pygame游戏之旅,分享python和pygame的安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法

    Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法

    今天小编就为大家分享一篇Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 关于tf.matmul() 和tf.multiply() 的区别说明

    关于tf.matmul() 和tf.multiply() 的区别说明

    这篇文章主要介绍了关于tf.matmul() 和tf.multiply() 的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 如何理解python对象

    如何理解python对象

    在本篇文章里小编给大家分享的是一篇关于python对象的理解相关内容,有兴趣的朋友们可以学习下。
    2020-06-06
  • pycharm使用matplotlib画图问题解决方法

    pycharm使用matplotlib画图问题解决方法

    Pycharm是一款功能强大的Python集成开发环境(IDE),它提供了许多有用的工具和功能,可以帮助开发人员更轻松地编写和调试Python代码,其中一个有用的工具是Pycharm如何画图,本文给大家介绍在pycharm中使用matplotlib画图问题,感兴趣的朋友一起看看吧
    2023-11-11
  • Python获取list中指定元素索引的两种方法小结

    Python获取list中指定元素索引的两种方法小结

    本文主要介绍了两种在Python中获取列表中指定元素索引的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • python调用shell的方法

    python调用shell的方法

    这篇文章主要介绍了python调用shell的方法,python调用shell命令的方法有许多种,大家可以参考使用
    2013-11-11
  • Django解决frame拒绝问题的方法

    Django解决frame拒绝问题的方法

    这篇文章主要介绍了Django解决frame拒绝问题的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 一文教会你用Python获取网页指定内容

    一文教会你用Python获取网页指定内容

    Python用做数据处理还是相当不错的,如果你想要做爬虫,Python是很好的选择,它有很多已经写好的类包,只要调用即可完成很多复杂的功能,下面这篇文章主要给大家介绍了关于Python获取网页指定内容的相关资料,需要的朋友可以参考下
    2022-03-03
  • django admin添加数据自动记录user到表中的实现方法

    django admin添加数据自动记录user到表中的实现方法

    下面小编就为大家分享一篇django admin添加数据自动记录user到表中的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01

最新评论