爬虫重试模块retry,自动重试
之前每次程序挂了,我都是用try except,或者用一个计数器,在一定范围内重试,现在发现了retry这样一个好用的模块
安装
pip install retrying
模块介绍
def __init__(self,stop=None, wait=None,stop_max_attempt_number=None,stop_max_delay=None,wait_fixed=None,wait_random_min=None, wait_random_max=None,wait_incrementing_start=None, wait_incrementing_increment=None,wait_exponential_multiplier=None, wait_exponential_max=None,retry_on_exception=None,retry_on_result=None,wrap_exception=False,stop_func=None,wait_func=None,wait_jitter_max=None):self._stop_max_attempt_number = 5 if stop_max_attempt_number is None else stop_max_attempt_numberself._stop_max_delay = 100 if stop_max_delay is None else stop_max_delayself._wait_fixed = 1000 if wait_fixed is None else wait_fixedself._wait_random_min = 0 if wait_random_min is None else wait_random_minself._wait_random_max = 1000 if wait_random_max is None else wait_random_maxself._wait_incrementing_start = 0 if wait_incrementing_start is None else wait_incrementing_startself._wait_incrementing_increment = 100 if wait_incrementing_increment is None else wait_incrementing_incrementself._wait_exponential_multiplier = 1 if wait_exponential_multiplier is None else wait_exponential_multiplierself._wait_exponential_max = MAX_WAIT if wait_exponential_max is None else wait_exponential_maxself._wait_jitter_max = 0 if wait_jitter_max is None else wait_jitter_max
stop_max_attempt_number
:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次stop_max_delay
:最大延迟时间,大概意思就是:如果调用的函数出现异常,那么就会重复调用这个函数,最大调用时间,默认为100毫秒wait_fixed
:两次调用方法期间停留时长, 如果出现异常则会一直重复调用,默认 1000毫秒wait_random_min
:在两次调用方法停留时长,停留最短时间,默认为0wait_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
: 指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出retry_on_result
:指定一个函数,如果指定的函数返回True
,则重试,否则抛出异常退出wrap_exception
:参数设置为True/False,如果指定的异常类型,包裹在RetryError
中,会看RetryError
和程序抛的Exception error
stop_func
: 每次抛出异常时都会执行的函数,如果和stop_max_delay
、stop_max_attempt_number
配合使用,则后两者会失效 (指定的stop_func会有两个参数:attempts
,delay
wait_func
:和stop_func
用法差不多。
不带参数
出错会一直重试
from retrying import retry@retry
def func():print('出错了') raisefunc()
设置最大重试次数stop_max_attempt_number
from retrying import retry@retry(stop_max_attempt_number=4)
def func():print('出错了') raisefunc()
设置失败重试失败的最大时间stop_max_delay
from retrying import retry@retry(stop_max_delay=10000)
def func():print('出错了') raisefunc()
代码执行后,重复提示‘出错了 ’持续10秒后,报异常
设置失败重试的间隔时间wait_fixed
from retrying import retry@retry(wait_fixed=2000, stop_max_delay=10000)
def func():print('出错了') raisefunc()
设置失败重试的随机性间隔时间wait_random_min, wait_random_max
from retrying import retry@retry(wait_random_min=1000, wait_random_max=5000, stop_max_delay=10000)
def func():print('出错了') raisefunc()
指定哪些条件下需要retry
retry_on_result
, 指定要在得到哪些结果的时候去retry
,retry_on_result
传入一个函数对象,在执行get_result
成功后,会将函数的返回值通过形参result的形式传入retry_if_result_none
函数中,如果返回值是None
那么就进行retry
,否则就结束并返回函数值
from retrying import retrydef save_me(result):return result is None@retry(retry_on_result=save_me)
def get_result():print('出错了')get_result()
爬虫重试模块retry,自动重试相关推荐
- python 异常重试模块retry
Python @retry装饰器的使用与实现案例(requests请求失败并重复请求) 在爬虫代码的编写中,requests请求网页的时候常常请求失败或错误,一般的操作是各种判断状态和超时,需要多次重 ...
- python爬虫网络中断_Python 爬虫总是超时中断?试试Tenacity重试模块
为了避免由于一些网络或等其他不可控因素,而引起的功能性问题.比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题. 这种情况下,我们通常会在代码中加入重试的代码.重试的代码本身不难实现,但如何写 ...
- foxmail邮件加载失败重试_java retry(重试) spring retry, guava retrying 详解
系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理:实现一个按条件,查询用户信息的服务. 小明:好的.没问题. 代码 UserServi ...
- java retry(重试) spring retry, guava retrying 详解
转载 自 http://blog.51cto.com/9250070/2156431 系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理 ...
- [js] 写一个方法实现promise失败后自动重试
[js] 写一个方法实现promise失败后自动重试 <!DOCTYPE html> <html lang="en"><head><met ...
- shell 执行失败重试_Smart Retry主要是用来进行方法重试
Smart Retry Smart Retry主要是用来进行方法重试的.和Guava Retry.Spring Retry相比,Smart Retry最大的特点是异步重试,支持持久化,系统重启之后可以 ...
- java 异常后重试_java – 异常后自动重试的功能
如果抛出一些异常,我已经使这个抽象类自动重试网络调用. >我在InterruptedException&之后注意不要重试 的UnknownHostException. >我重试了5 ...
- 重试机制 Retry
文章目录 1.重试 1.1 重试作用 2.重试的三种方法 2.1 java retry 2.2 spring retry 2.3 guava-retrying 2.3.1 重试源 2.3.2 自定义重 ...
- rabbitmq消息阻塞情况分析;自动重试处理异常
现象描述 消费者因为代码问题出现了异常,此时默认是自动提交的消息,这个RuntimException会导致消息直接重新入队,再次投递(进入队首),此时会导致后面的消息被阻塞. 分析 auto自动确认分 ...
最新文章
- 《大道至简》阅读笔记二
- win10安装mysql
- 基于吉日嘎拉的通用权限管理WebForm版扩展:字典选项管理和缓存管理
- Operation condition And timing analysis
- SharePoint2010内容类型剖析(四)
- c语言中把每个字母向前移1位,C语言:将字符串中的前导*号全部移到字符串的尾部。...
- 信息学奥赛C++语言: 数字方阵
- Linux安装mongodb数据库最新版(全网最细)
- NoSQL 已死:我们不需要他了
- Text Particle Systems
- 区块链:深入浅出零知识证明
- 网络运维工程师常见的面试题及需掌握的知识点
- 怎样更改itunes备份位置_iTunes备份路径在哪?iTunes备份路径如何修改
- C语言编程 | 转义字符
- MySQL提示Can‘t connect to MySQL server on localhost (10061)解决方法
- 不背字根学五笔视频教程
- AI为啥能读懂说话人的情感?
- php取am+pm时间格式,php – 如何将带有日期和时间AM / PM的字符串转换为24小时的mysql时间戳格式...
- 视频去除水印、台标和logo,并重新在生成新的视频
- MathType+Originlab的有用知识