之前每次程序挂了,我都是用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
  1. stop_max_attempt_number:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次
  2. stop_max_delay:最大延迟时间,大概意思就是:如果调用的函数出现异常,那么就会重复调用这个函数,最大调用时间,默认为100毫秒
  3. wait_fixed:两次调用方法期间停留时长, 如果出现异常则会一直重复调用,默认 1000毫秒
  4. wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0
  5. wait_random_max:在两次调用方法停留时长,停留最长时间,默认为1000毫秒
  6. wait_incrementing_increment:每调用一次则会增加的时长,默认 100毫秒
  7. wait_exponential_multiplierwait_exponential_max:以指数的形式产生两次「retrying」之间的停留时间,产生的值为2^previous_attempt_number* wait_exponential_multiplierprevious_attempt_number是前面已经「retry」的次数,如果产生的这个值超过了wait_exponential_max的大小,那么之后两个「retrying」之间的停留值都为wait_exponential_max
  8. retry_on_exception: 指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出
  9. retry_on_result:指定一个函数,如果指定的函数返回True,则重试,否则抛出异常退出
  10. wrap_exception:参数设置为True/False,如果指定的异常类型,包裹在RetryError中,会看
  11. RetryError和程序抛的Exception error
  12. stop_func: 每次抛出异常时都会执行的函数,如果和stop_max_delaystop_max_attempt_number配合使用,则后两者会失效 (指定的stop_func会有两个参数:attempts, delay
  13. 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, 指定要在得到哪些结果的时候去retryretry_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,自动重试相关推荐

  1. python 异常重试模块retry

    Python @retry装饰器的使用与实现案例(requests请求失败并重复请求) 在爬虫代码的编写中,requests请求网页的时候常常请求失败或错误,一般的操作是各种判断状态和超时,需要多次重 ...

  2. python爬虫网络中断_Python 爬虫总是超时中断?试试Tenacity重试模块

    为了避免由于一些网络或等其他不可控因素,而引起的功能性问题.比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题. 这种情况下,我们通常会在代码中加入重试的代码.重试的代码本身不难实现,但如何写 ...

  3. foxmail邮件加载失败重试_java retry(重试) spring retry, guava retrying 详解

    系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理:实现一个按条件,查询用户信息的服务. 小明:好的.没问题. 代码 UserServi ...

  4. java retry(重试) spring retry, guava retrying 详解

    转载 自 http://blog.51cto.com/9250070/2156431 系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理 ...

  5. [js] 写一个方法实现promise失败后自动重试

    [js] 写一个方法实现promise失败后自动重试 <!DOCTYPE html> <html lang="en"><head><met ...

  6. shell 执行失败重试_Smart Retry主要是用来进行方法重试

    Smart Retry Smart Retry主要是用来进行方法重试的.和Guava Retry.Spring Retry相比,Smart Retry最大的特点是异步重试,支持持久化,系统重启之后可以 ...

  7. java 异常后重试_java – 异常后自动重试的功能

    如果抛出一些异常,我已经使这个抽象类自动重试网络调用. >我在InterruptedException&之后注意不要重试 的UnknownHostException. >我重试了5 ...

  8. 重试机制 Retry

    文章目录 1.重试 1.1 重试作用 2.重试的三种方法 2.1 java retry 2.2 spring retry 2.3 guava-retrying 2.3.1 重试源 2.3.2 自定义重 ...

  9. rabbitmq消息阻塞情况分析;自动重试处理异常

    现象描述 消费者因为代码问题出现了异常,此时默认是自动提交的消息,这个RuntimException会导致消息直接重新入队,再次投递(进入队首),此时会导致后面的消息被阻塞. 分析 auto自动确认分 ...

最新文章

  1. 《大道至简》阅读笔记二
  2. win10安装mysql
  3. 基于吉日嘎拉的通用权限管理WebForm版扩展:字典选项管理和缓存管理
  4. Operation condition And timing analysis
  5. SharePoint2010内容类型剖析(四)
  6. c语言中把每个字母向前移1位,C语言:将字符串中的前导*号全部移到字符串的尾部。...
  7. 信息学奥赛C++语言: 数字方阵
  8. Linux安装mongodb数据库最新版(全网最细)
  9. NoSQL 已死:我们不需要他了
  10. Text Particle Systems
  11. 区块链:深入浅出零知识证明
  12. 网络运维工程师常见的面试题及需掌握的知识点
  13. 怎样更改itunes备份位置_iTunes备份路径在哪?iTunes备份路径如何修改
  14. C语言编程 | 转义字符
  15. MySQL提示Can‘t connect to MySQL server on localhost (10061)解决方法
  16. 不背字根学五笔视频教程
  17. AI为啥能读懂说话人的情感?
  18. php取am+pm时间格式,php – 如何将带有日期和时间AM / PM的字符串转换为24小时的mysql时间戳格式...
  19. 视频去除水印、台标和logo,并重新在生成新的视频
  20. MathType+Originlab的有用知识

热门文章

  1. OpenCV+Python简单实践之硬币检测以及条形码检测
  2. Jenkins配置定时任务
  3. R语言分组求和,分组求平均值,分组计数
  4. 网管员必知:常用电脑密码破解(转)
  5. 印象笔记(evernote)支持MarkDown语法
  6. 信息安全工程师(软考中级)
  7. cpi 计算机体系结构 转移指令,计算机体系结构题目.ppt
  8. 第九周项目——穷举法之三色球
  9. CCF系列题解--2017年12月第三题 Crontab
  10. 编程帮助小明计算地铁票价(C++)