图/文:迷神
从之前写的 【Python登陆小米路由器拨号更换IP,绕过网站反爬IP限制机制】我们就可以看到python有一种重试机制,很好用。特别是在写爬虫的时候,简直是python爬虫必备利器。
工作中也经常碰到的问题就是,某个方法出现了异常,重试几次。循环重复一个方法是很常见的。比如爬虫中的获取代理,对获取失败的情况进行重试。或者是python爬虫爬取网页的内容的时候出现错误,也需要使用重试等,在爬虫领域,这个模块应该还是很不错的。
![75e540cbe9e600eaed519c0df8d9960a.png](https://i-blog.csdnimg.cn/blog_migrate/9eefa525cae1096a06b446ceaa542a5a.jpeg)
人生苦短啊
安装retrying模块
pip install retrying #安装
retrying提供一个装饰器函数retry,被装饰的函数会在运行失败的情况下重新执行,默认一直报错就一直重试。我们先看下我们之前的一段代码:
from retrying import retry@retry(stop_max_attempt_number=50000,wait_fixed=2000)def tyc():#代码if __name__ == '__main__': tyc()
这个里面retry的装饰器,有2个参数,stop_max_attempt_number 代表最大重试次数,wait_fixed 代码,间隔多久进行重试。
retry常用参数相关
他的其他参数用法有,我罗列一些我开发过程常用的给大家,希望对大家有帮助,基本上这些都够用了:
# 设置方法的最大延迟时间,默认为100毫秒(是执行这个方法重试的总时间)@retry(stop_max_attempt_number=5,stop_max_delay=50)
# 添加每次方法执行之间的等待时间@retry(stop_max_attempt_number=5,wait_fixed=2000)# 随机的等待时间@retry(stop_max_attempt_number=5,wait_random_min=100,wait_random_max=2000)# 每调用一次增加固定时长@retry(stop_max_attempt_number=5,wait_incrementing_increment=1000)
其他的还有参数:
1、stop_max_attempt_number 在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行
2、stop_max_delay 最大延迟时间
3、wait_fixed:两次调用方法期间停留时长,默认1000毫秒,1秒
4、wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0
5、wait_random_max:在两次调用方法停留时长,停留最长时间,默认为1000毫秒
6、wait_incrementing_increment:每调用一次则会增加的时长,默认 100毫秒
7、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
8、retry_on_exception: 指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出
9、retry_on_result:指定一个函数,如果指定的函数返回True,则重试,否则抛出异常退出
使用比较简单,用的最多的不外乎:stop_max_attempt_number,stop_max_delay 这两个。其他还有一些,大家可以去参考文档。
好了,就这么多啦,我是迷神,更多精彩,记得关注我哦,请多多转发,有问题也可以评论哦。