安装模块: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

retrying模块的使用的更多相关文章

  1. retrying模块的学习

    retrying模块的学习 我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过try块去进行重试,但是每次都写那么一堆try块,真的是太麻烦,所以今天就来说一个比较pythonic的 ...

  2. retrying模块的安装及使用

    安装retrying模块: win10用户在联网的情况下直接在cmd.exe里面键入"pip install retrying"  即可安装retrying模板 在网页正常浏览的过 ...

  3. retrying 模块

    我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过 try 块去进行重试,但是每次都写那么一堆 try 块,真的是太麻烦了,所以今天就来说一个比较 pythonic 的模块,retr ...

  4. Python重试模块retrying

    Python重试模块retrying 工作中经常碰到的问题就是,某个方法出现了异常,重试几次.循环重复一个方法是很常见的.比如爬虫中的获取代理,对获取失败的情况进行重试. 刚开始搜的几个博客讲的有点问 ...

  5. 爬虫学习(二)requests模块的使用

    一.requests的概述 requests模块是用于发送网络请求,返回响应数据.底层实现是urllib,而且简单易用,在python2.python3中通用,能够自动帮助我们解压(gzip压缩的等) ...

  6. python 爬虫与数据可视化--爬虫基础知识

    一.python中的模块 模块的安装:pip install 模块名 导入模块与函数:import requests . from pymongo import MongoClient json模块的 ...

  7. 转--python 黑魔法2

    Python 高效编程小技巧 个人博客:临风|刀背藏身 Python 一直被我拿来写算法题,小程序,因为他使用起来太方便了,各种niubi闪闪的技能点也在写算法的过程中逐渐被挖掘到,感谢万能的谷哥度娘 ...

  8. Python爬虫一

    爬虫 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应, 一种按照一定的规则,自动地抓取互联网信息的程序. 原则上,只要是浏览器(客户端)能做的事情,爬虫 ...

  9. <爬虫>相关的知识

    1.概念.工具和HTTP 什么是爬虫 模拟客户端发送网络请求,获取响应,按照规则提取数据 爬虫的数据去哪了 展示到网页上(百度新闻,今日头条) 进行分析,从数据中寻找规律(指数网站:百度指数) 需要的 ...

随机推荐

  1. Docker系列(八):Kubernetes横空出世背后的秘密

    Docker与CoreOS的恩怨情仇 2013年2月,Docker建立了一个网站发布它的首个演示版本, 3月,美国加州Alex Polvi正在自己的车库开始 他的 第二次创业 有了第一桶金的Alex这 ...

  2. Git的忽略提交规则

    相关知识参考资料: https://git-scm.com/book/zh/v2/Git-基础-记录��% 8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%9 ...

  3. Activity详解三 启动activity并返回结果 转载 https://www.cnblogs.com/androidWuYou/p/5886991.html

    首先看演示: 1 简介 .如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int ...

  4. SSH整合时执行hibernate查询报错:java.lang.ClassCastException: com.ch.hibernate.Depart

    今天在整合ssh三个框架时,有一个功能,是查询所有员工信息,且员工表和部门表是多对一的映射关系,代码能正常运行到查询得到一个List集合,但在页面展示的时候,就报异常了, java.lang.Clas ...

  5. <day003>登录+爬取淘宝商品信息+字典用json存储

    任务1:利用cookie可以免去登录的烦恼(验证码) ''' 只需要有登录后的cookie,就可以绕过验证码 登录后的cookie可以通过Selenium用第三方(微博)进行登录,不需要进行淘宝的滑动 ...

  6. FineUI使用记录

    @{ ViewBag.Title = "Grid/Grid"; var F = Html.F();} @section body { @(F.Grid().IsFluid(true ...

  7. wpf 纯样式写按钮

    <!--自定义按钮样式--> <LinearGradientBrush x:Key="LinearGradientBlueBackground" EndPoint ...

  8. Johnson–Lindenstrauss 定理-Johnson–Lindenstrauss lemma

    Johnson–Lindenstrauss 定理是这样的:一个一百万维空间里的随便一万个点,一定可以几乎被装进一个几十维的子空间里! 严格说来是这样:在 M 维空间中的 N 个点,几乎总是被包含在一个 ...

  9. (一)phonegap自学---不会java也会写原生app

    移动设备如日中天的今天 微软的表现让我们这些.net程序员无不心寒!!幸好每次乱世出英豪,古有java能夸平台,.net跨语言,今有phonegap跨设备 phonegap是什么 狂点这 http:/ ...

  10. nodejs实现读取文件

    今天后端同事下班,想让我读取一个文件的内容.我想这个是小忙啊,就立马答应了. 我知道这个是nodejs读取,可是我又想,平时我们都要起一个服务才能够运行node服务器, 比如如下代码 var http ...