retrying模块的使用
安装模块:pip3 install retrying
使用方式:
- 使用retrying模块提供的retry模块
- 通过装饰器的方式使用,让装饰器的函数反复的执行
- 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模块的使用的更多相关文章
- retrying模块的学习
retrying模块的学习 我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过try块去进行重试,但是每次都写那么一堆try块,真的是太麻烦,所以今天就来说一个比较pythonic的 ...
- retrying模块的安装及使用
安装retrying模块: win10用户在联网的情况下直接在cmd.exe里面键入"pip install retrying" 即可安装retrying模板 在网页正常浏览的过 ...
- retrying 模块
我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过 try 块去进行重试,但是每次都写那么一堆 try 块,真的是太麻烦了,所以今天就来说一个比较 pythonic 的模块,retr ...
- Python重试模块retrying
Python重试模块retrying 工作中经常碰到的问题就是,某个方法出现了异常,重试几次.循环重复一个方法是很常见的.比如爬虫中的获取代理,对获取失败的情况进行重试. 刚开始搜的几个博客讲的有点问 ...
- 爬虫学习(二)requests模块的使用
一.requests的概述 requests模块是用于发送网络请求,返回响应数据.底层实现是urllib,而且简单易用,在python2.python3中通用,能够自动帮助我们解压(gzip压缩的等) ...
- python 爬虫与数据可视化--爬虫基础知识
一.python中的模块 模块的安装:pip install 模块名 导入模块与函数:import requests . from pymongo import MongoClient json模块的 ...
- 转--python 黑魔法2
Python 高效编程小技巧 个人博客:临风|刀背藏身 Python 一直被我拿来写算法题,小程序,因为他使用起来太方便了,各种niubi闪闪的技能点也在写算法的过程中逐渐被挖掘到,感谢万能的谷哥度娘 ...
- Python爬虫一
爬虫 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应, 一种按照一定的规则,自动地抓取互联网信息的程序. 原则上,只要是浏览器(客户端)能做的事情,爬虫 ...
- <爬虫>相关的知识
1.概念.工具和HTTP 什么是爬虫 模拟客户端发送网络请求,获取响应,按照规则提取数据 爬虫的数据去哪了 展示到网页上(百度新闻,今日头条) 进行分析,从数据中寻找规律(指数网站:百度指数) 需要的 ...
随机推荐
- PAT甲级——A1113 Integer Set Partition
Given a set of N (>) positive integers, you are supposed to partition them into two disjoint sets ...
- Spark中使用Java编程的常用方法
原文引自:http://blog.sina.com.cn/s/blog_628cc2b70102w9up.html 一.初始化SparkContext System.setProperty(" ...
- 2019-8-31-dotnet-特性-DynamicallyInvokable-是用来做什么的
title author date CreateTime categories dotnet 特性 DynamicallyInvokable 是用来做什么的 lindexi 2019-08-31 16 ...
- 洛谷P2371 [国家集训队]墨墨的等式
P2371 [国家集训队]墨墨的等式 题目描述 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=Ba_1x_1+a_2y_2+-+a_nx_n=Ba1x1+a2y2+-+a ...
- Python全栈开发:DOM
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...
- Func-Chain.js 另一种思路的javascript异步编程解决方案
本文转载自:https://www.ctolib.com/panruiplay-func-chain.html Func-Chain.js 另一种思路的javascript异步编程,用于解决老式的回调 ...
- webpack打包出错分析
Module not found: Error: Can't resolve 'bundle.js' in 更改打包命令 webpack run1.js -o bundle.js
- 【五校联考5day1】登山
题目 描述 题目大意 给你一个n∗nn*nn∗n的网格图.从(0,0)(0,0)(0,0)开始,每次只可以向右或向上移动一格,并且不能越过对角线(即不能为x<yx<yx<y). 网格 ...
- Win10弹出需要管理员权限才能删除文件夹,解决办法
Win键+R(就是开始-运行),弹出的输入框输入gpedit.msc回车. 绿色圈内是正解,设置为已禁用.已禁用.已禁用.记着重启才生效.
- MYSQL批量创建表的存储过程
因为业务需要,创建了100个表,但是这些表的结构都是一样的,作为程序员,就是要解决这种重复劳动.然而这种事情还要单独写个php脚本的话太麻烦了吧,所以就干脆学了一下直接用Mysql存储过程怎么实现: ...