首页 > 编程语言 >python之为函数执行设置超时时间(允许函数执行的最大时间)

python之为函数执行设置超时时间(允许函数执行的最大时间)

时间:2024-03-04 09:57:19浏览次数:26  
标签:set 函数 python timeout num func time import 超时

1、背景

 

 

    通常我们在自定义一个函数后,会调用这个函数来完成我们想要的功能。

    就拿爬虫来举例,发送请求后服务器会在指定时间内响应(通常这个时间很短),但是有可能服务器没有返回任何数据

    无论是服务器已经识别爬虫不予返回数据亦或者是服务器繁忙等其他原因,此时,爬虫程序就会一直等待来自服务器的响应。

    这个时候就会非常浪费资源,甚至造成程序阻塞。

2、使用python第三方 func_timeout 模块中提供的 func_set_timeout 装饰器可以非常简单的设置python程序的超时时间,超时后程序抛出 func_timeout.exceptions.FunctionTimedOut 异常。此时再用 try-except 做异常处理即可。

#coding:utf-8

from func_timeout import func_set_timeout
import time

@func_set_timeout(5)
def timer():
    for num in range(10):
        time.sleep(1)
        print(num)
timer()

结果如下:

 

3、捕捉超时抛出的异常

#coding:utf-8

import func_timeout
from func_timeout import func_set_timeout
import time

@func_set_timeout(5)
def timer():
    for num in range(10):
        time.sleep(1)
        print(num)

try:
    timer()
except func_timeout.exceptions.FunctionTimedOut as e:
    print(e)
    print("函数运行时间超过5秒,强制结束运行")

运行结果如下:

 

通过装饰器的形式捕捉异常

#coding:utf-8

import func_timeout
from func_timeout import func_set_timeout, FunctionTimedOut
import time

def time_out(fn):
    def wrapper(*args,**kwargs):
        try:
            reuslt = fn(*args,**kwargs)
            return result
        except:
            print("函数运行时间超过5秒,强制结束运行")
    return wrapper

@time_out
@func_set_timeout(5)
def timer():
    for num in range(10):
        time.sleep(1)
        print(num)

timer()

运行结果如下:

 

标签:set,函数,python,timeout,num,func,time,import,超时
From: https://www.cnblogs.com/superbaby11/p/18051209

相关文章

  • python基础面试题
    1.断言是什么?assert(断言)用于判断一个表达式,在表达式条件为false的时候会抛出异常AssertionError,ture时断言通过1.1基本语法是:<assert要判断的表达式>1.2断言方法及其用法示例:assertEqual(a,b):断言a和b相等。self.assertEqual(2+2,4)assertNotEqual(a,b):断......
  • python 视图渲染方式
    1 第二种和第三种都需要改配置文件(需要重启服务)   2  3  ......
  • python接口自动化系列(14):一键执行生成并打开报告
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074需求在前面的篇幅中,查看测试报告,我们要先运行自动化框架(执行pythonmain.py命令)生成result,然后再生成allure-report,最后再打开报告,这样稍显麻烦。有测试小伙伴就问,能不能一键执行生成并打开报告呢?当然可......
  • 【python接口自动化系列】python + pytest + requests + allure + jsonpath + pyyaml,
     前置基础:python虚拟环境的创建、操作、迁移等python操作yamlpython操作mysqlpytest简易教程 配套练习环境(含相关接口):https://www.cnblogs.com/uncleyong/p/17165143.html 如果文章不能访问,请联系处理,wx:ren168632201 python接口自动化系列(01):自动化测试框......
  • python接口自动化系列(13):windows下allure报告展示
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标上一步获取到测试报告的数据了,这里我们通过命令生成报告并在浏览器中查看报告。 allure-commandline在windows下安装、配置参考:https://www.cnblogs.com/uncleyong/p/16726826.html windows......
  • python加载库
    #testInstance.pyimportimportlibimportsysclassTestInstance:def__init__(self,projectName):self.projectName=projectNameself.lib=self.load_libraries()defload_libraries(self):#Import......
  • python接口自动化系列(10):保存全局变量
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标如果后续有请求依赖本次请求的响应结果,那么把依赖数据保存到全局变量,比如token 安装模块jsonpath用于解析json数据pipinstalljsonpath 修改工具类global_variable_tool.py添加方法,用于......
  • python接口自动化系列(11):断言请求结果
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标解析测试数据中要断言的字段,进行断言,判断用例是否成功。 添加工具模块utils下添加assert_tool.py#!/usr/bin/envpython#-*-coding:utf-8-*-#@Author:韧#@wx:ren168632201#@Blo......
  • go 函数
    //字符串的使用str:="golang你好"//字符串长度fmt.Println(len(str))//循环输出fork,v:=rangestr{fmt.Printf("索引为:%d,具体值为:%c\n",k,v)}//以切片循环展示r:=[]rune(str)fori:=0;i<len(......
  • python接口自动化系列(12):集成allure
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标获取到测试结果后,把结果展示在allure报告中,allure报告非常美观,是目前主流。本篇我们先生成json格式的测试结果数据。 安装allure插件pipinstallallure-pytest 修改测试类动态添加allur......