安装模块:pip3 install retrying

使用方式:

  1. 使用retrying模块提供的retry模块
  2. 通过装饰器的方式使用,让装饰器的函数反复的执行
  3. retry可以传入参数stop_max_attempt_number,让函数报错后继续重新执行,达到最大执行次数的上线,如果每次都报错,整个函数就报错,只要中间有一个成功了的话,程序就可以继续往后面执行了

例子:

from retrying import retry
@retry(stop_max_attempt_number=5,wait_random_min=1000,wait_random_max=5000)
def run():
print("开始重试")
raise NameError if __name__ == '__main__':
run()

首先导入了retry模块

然后装饰了一个run函数,函数中很简单,主要就是通过raise跑出了一个异常,执行这个代码 我们可以发现,程序打印了五次开始重试,最后一次抛出异常,NameError,那么到了这里我们就可以感受到,就是这么简单的代码,就完成了五次重试,同时这五次重试的间隔时间也是不同的,要是想尝试重复十次以上的的话,就需要把上面的stop_max_attempt_number改成10就可以了,到这里就可以解释retry装饰器的参数了

retry的使用就是这么简单,关键是装饰器里面的参数的使用,要是不写参数的话就会一直一种重试

stop_max_attempt_number

    在停止之前尝试的最大次数,最后一次如果还是有异常就会抛出异常,停止运行,默认是五次(强调总次数)

stop_max_delay

    最大延迟时间,大概的意思就是:如果调用的函数抛出异常了,那么就会重复调用这个函数,最大调用时间,默认100毫秒

  

wait_random_min

    在两次调用方法停留时长,停留最短的时间,默认是0

wait_random_max

    在两次调用方法停留时长,停留最长时间,默认是1000毫秒

wait_incrementing_increment

    每调用一次就会增加的时长,默认是100毫秒

wait_exponential_multiplier和wait_exponential_max

    以指数的形式产生两次retrying之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplier,previous_attempt_number是前面已经retry的次数,如果产生的这个值超过了wait_exponential_max的大小,那么之后两个retrying之间的停留值都为wait_exponential_max

retry_on_exception

    指定一个函数,如果这个函数返回指定异常,就会重试,如果不是指定的异常就会推出

from retrying import retry
def run2(exception):
return isinstance(exception, ZeroDivisionError)
@retry(retry_on_exception=run2)
def run():
print("开始重试")
a = 1 / 0
if __name__ == '__main__':
run()

retry_on_result

    指定一个函数,如果指定的函数返回True,就重试,否则抛出异常退出

rom retrying import retry
def run2(r):
return isinstance(r, int)
@retry(retry_on_result=run2)
def run():
print("开始重试")
a = 1
return a
if __name__ == '__main__':
run()

wrap_exception

    参数设置为True/False,如果指定的异常类型,包裹在retryError中,就会看到RetryError和程序抛出的Exception error

stop_func

    每次抛出异常的时候都会执行的函数,如果stop_max_delay、stop_max_attmpt_number配合使用,则后两个就会失效,指定的stop_func会有两个参数:attempt、delay

wait_func

    和stop_func的用法差不多,就不过多的描述了

ps:如果没有捕获到异常,就会从该层外层的异常重试触发;尝试两次失败会报错,所以在再次使用处理,跳出报错,直接pass

最新文章

  1. .NET 缓存模块设计
  2. 在html中引用分享的链接
  3. __getattr__ 与动态属性
  4. poj2369 Permutations ——置换群
  5. yum标准化安装nginx最新版
  6. 【PHP】Windows环境Hello World
  7. Windows Server 2008 安装好之后的简单配置
  8. objectc中函数前的加号和减号
  9. 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍
  10. 关于word2016中mathtype无法使用以及“由于宏安全设置,无法找到宏或宏已被禁用”的解决方案
  11. ThreadPoolExecutor系列二——ThreadPoolExecutor 代码流程图
  12. 数电基础之《OC门》
  13. Win32文件系统编程
  14. web 浏览器窗口
  15. winform程序内存不足或假死的问题
  16. 微信JSSDK接口,previewImage
  17. 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
  18. php aes加密
  19. 替换 ionic 中的 图标
  20. bzoj1176

热门文章

  1. UVA 12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
  2. day 84 Vue学习六之axios、vuex、脚手架中组件传值
  3. windows安装vscode,配置golang环境
  4. Map、可变参数、静态导入、Collections、Arrays、集合嵌套
  5. Spring Boot 发布 jar 包转为 war 包秘籍。
  6. MyBatis - 常用标签与动态Sql
  7. CentOS7-Minimal安装MySQL服务
  8. 宽域POST提交数据
  9. DuiLib学习笔记3.颜色探究
  10. centos6 nginx 配置本地https访问