python 装饰器模式(python重试装饰器的简单实现方法)
类别:脚本大全 浏览量:2076
时间:2022-04-02 10:55:40 python 装饰器模式
python重试装饰器的简单实现方法简单实现了一个在函数执行出现异常时自动重试的装饰器,支持控制最多重试次数,每次重试间隔,每次重试间隔时间递增。
最新的代码可以访问从github上获取
https://github.com/blackmatrix7/matrix-toolkit/blob/master/toolkit/retry.py
|
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/18 上午9:50 # @Author : Matrix # @Github : https://github.com/blackmatrix7/ # @Blog : http://www.cnblogs.com/blackmatrix/ # @File : retry.py # @Software: PyCharm import time from functools import wraps __author__ = 'blackmatrix' """ 在函数执行出现异常时自动重试的简单装饰器 """ class StopRetry(Exception): def __repr__( self ): return 'retry stop' def retry(max_retries: int = 5 , delay: ( int , float ) = 0 , step: ( int , float ) = 0 , exceptions: (BaseException, tuple , list ) = BaseException, sleep = time.sleep, callback = None , validate = None ): """ 函数执行出现异常时自动重试的简单装饰器。 :param max_retries: 最多重试次数。 :param delay: 每次重试的延迟,单位秒。 :param step: 每次重试后延迟递增,单位秒。 :param exceptions: 触发重试的异常类型,单个异常直接传入异常类型,多个异常以tuple或list传入。 :param sleep: 实现延迟的方法,默认为time.sleep。 在一些异步框架,如tornado中,使用time.sleep会导致阻塞,可以传入自定义的方法来实现延迟。 自定义方法函数签名应与time.sleep相同,接收一个参数,为延迟执行的时间。 :param callback: 回调函数,函数签名应接收一个参数,每次出现异常时,会将异常对象传入。 可用于记录异常日志,中断重试等。 如回调函数正常执行,并返回True,则表示告知重试装饰器异常已经处理,重试装饰器终止重试,并且不会抛出任何异常。 如回调函数正常执行,没有返回值或返回除True以外的结果,则继续重试。 如回调函数抛出异常,则终止重试,并将回调函数的异常抛出。 :param validate: 验证函数,用于验证执行结果,并确认是否继续重试。 函数签名应接收一个参数,每次被装饰的函数完成且未抛出任何异常时,调用验证函数,将执行的结果传入。 如验证函数正常执行,且返回False,则继续重试,即使被装饰的函数完成且未抛出任何异常。 如回调函数正常执行,没有返回值或返回除False以外的结果,则终止重试,并将函数执行结果返回。 如验证函数抛出异常,且异常属于被重试装饰器捕获的类型,则继续重试。 如验证函数抛出异常,且异常不属于被重试装饰器捕获的类型,则将验证函数的异常抛出。 :return: 被装饰函数的执行结果。 """ def wrapper(func): @wraps (func) def _wrapper( * args, * * kwargs): nonlocal delay, step, max_retries func_ex = StopRetry while max_retries > 0 : try : result = func( * args, * * kwargs) # 验证函数返回False时,表示告知装饰器验证不通过,继续重试 if callable (validate) and validate(result) is False : continue else : return result except exceptions as ex: # 回调函数返回True时,表示告知装饰器异常已经处理,终止重试 if callable (callback) and callback(ex) is True : return func_ex = ex finally : max_retries - = 1 if delay > 0 or step > 0 : sleep(delay) delay + = step else : raise func_ex return _wrapper return wrapper if __name__ = = '__main__' : pass |
以上这篇python重试装饰器的简单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://www.cnblogs.com/blackmatrix/p/7425435.html
您可能感兴趣
- python规定输入值的最大值(实例讲解Python中整数的最大值输出)
- pythonselenium怎么设置元素(Python2 Selenium元素定位的实现8种)
- python函数调用传递数组数据(python调用c++传递数组的实例)
- python排列组合计算方法(Python实现的排列组合、破解密码算法示例)
- python怎么给rsa加密(Python生成rsa密钥对操作示例)
- 如何用python画函数图(使用python绘制二元函数图像的实例)
- python报表可视化(使用Python快速制作可视化报表的方法)
- pythonrequests怎么导入模块(Python3使用requests模块实现显示下载进度的方法详解)
- python数组与矩阵转换(python 读取文件并把矩阵转成numpy的两种方法)
- 抖音上很火的表白程序链接(我喜欢你 抖音表白程序python版)
- 如何对python中列表中的数据运算(Python3.5集合及其常见运算实例详解)
- python 爬虫招聘(Python3获取拉勾网招聘信息的方法实例)
- python爬取豆瓣电影评论(python使用requests模块实现爬取电影天堂最新电影信息)
- 用python简单实现登录功能(使用python的pexpect模块,实现远程免密登录的示例)
- python怎么进行参数传递(在Python中如何传递任意数量的实参的示例代码)
- python搭建django框架(详解Python网络框架Django和Scrapy安装指南)
- 元宵晚会槽点多,芒果台上来就假唱,岳云鹏不说相声改评书了(元宵晚会槽点多)
- 岳云鹏跟凤凰传奇谈心,说出了人生中最重要的三个人,这才成功(岳云鹏跟凤凰传奇谈心)
- 爱情可以当饭吃吗(爱情能当饭吃吗)
- Top 3 JSHS《运动与健康科学 英文 》跻身SCI体育学期刊世界前三(Top3JSHS运动与健康科学)
- 体坛传媒LOGO全新升级,多元发展迈出坚实步伐(体坛传媒LOGO全新升级)
- 超撩人治愈的绝美水彩,原来出自她之手 一笔一画令无数人沉醉(超撩人治愈的绝美水彩)
热门推荐
- ubuntu下mysql安装教程(Ubuntu 20.04 安装和配置MySql5.7的详细教程)
- php教程7.10.6学习(php5.6.x到php7.0.x特性小结)
- sqlserver2012知识点(SQL Server 2012 安全概述)
- python程序怎么打包(Python 实现文件打包、上传与校验的方法)
- python数值基本运算方法(Python常见数字运算操作实例小结)
- 织梦模板修改列表(手把手教你制作织梦自定义公告模板)
- docker与本地存储(docker 设置windows存储路径的操作)
- vue3中的setup的参数(Vue3中ref与reactive的详解与扩展)
- opencv 图像匹配python(OpenCV+Python识别车牌和字符分割的实现)
- html5书写规范教学(Html5踩坑记之mandMobile使用小记)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9