在Python开发过程中,有些程序的运行可能受外部环境稳定性等因素的影响,触发一些其他异常,比如请求响应、数据库链接。由于在程序设计中难以潜在的异常考虑完全,特别是那些由于稳定性带来的异常,这时如果引入重试机制,那么我的程序健壮性得到很大提升。
什么是修饰器
装饰器本质上是Python函数,能够实现让其他函数在不需要做任何代码变动的前提下增加额外功能。
可以看出,fun_a(fun_b)的执行过程如下:
- 执行函数fun_a,将fun_b当作参数传进去,fun_b()本身也是对象。
- 执行print (fun()) 代码时,先执行了 fun_b(),然后打印’Run Function B’ , 返回 2019-06-11 21:17:27 。
- print(fun()) 打印了fun_b()的返回结果 2019-06-11 21:17:27 。
使用修饰器进行改造,如下:
执行fun_b相当于 fun_b = fun_a(fun_b) ,只是在定义fun_b时,在其前使用@fun_a 进行修饰。
再引入闭包进行改造,如下:
在fun_a内部的函数retry(),是如何获取fun这个参数来执行的?执行fun_a函数return的是retry这个函数,而retry并没有接受fun这个传参。这就是Python里的闭包的概念,闭包就是指运行时自带上下文的函数,如这里的retry函数,他运行的时候自带了上层函数fun_a传给他的fun这个函数,所以才可以在运行时对fun进行处理和输出。
修饰器实现重试机制
简单的重试机制实现
复杂的重试机制实现
支持重试次数和等待时间,如下:
使用 retrying 模块实现重试机制
安装
pip install retrying
参数说明
使用说明
使用@retry,通过参数设置,可以灵活地设置重试机制。
若感兴趣, 、评论支持。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!