注意

  • 安装
  • 重试次数包括第一次执行, 即重试 3 次就是执行 3 次

示例

无任何限制

# 会一直重试
from tenacity import *@retry
def aaa():print(123)raise Exceptionaaa()

重试次数

# 重试总次数不超过 x 次
from tenacity import *@retry(stop=stop_after_attempt(2))
def aaa():print(123)raise Exceptionaaa()

重试时间限制(总数)

# 重试总时长不超过 x 秒
from tenacity import *@retry(stop=stop_after_delay(5))
def aaa():print(123)raise Exceptionaaa()

“|” 的使用

# 重试 3 次或重试 5 秒, 并报出异常
from tenacity import *@retry(stop=(stop_after_delay(5)|stop_after_attempt(3)))
def aaa():print(123)raise Exceptionaaa()

重试前等待

# 每次重试前等待 x 秒, 第一次不等待
from tenacity import *@retry(wait=wait_fixed(2))
def aaa():print(123)raise Exceptionaaa()

坑点注意

  • wait_fixed 是重试前等待, 重试实际已经开始
  • 如下示例:
    • 超时 5 秒, 执行前等待 4 秒
    • 第一次执行, 约为 0 秒, 失败, 重试
    • 第二次执行, 等待 4 秒, 失败, 此时仍在 5 秒内, 所以继续重试
    • 第三次执行, 等待 4 秒, 失败, 抛出错误
    • 实际执行时间会超过 5 秒
  • 如果执行前等待为 5 秒, 则重试两次就会触发 5 秒的超时限制, 直接抛出错误
# 重试总时长不超过 5 秒, 总次数不超过 3 次, 重试前等待 4 秒
from tenacity import *@retry(stop=(stop_after_delay(5)|stop_after_attempt(3)), wait=wait_fixed(4))
def aaa():print(123)sleep(2)raise Exceptionaaa()

自定义重试规则

# 自定义重试规则, 为 false 则重试
from tenacity import *def is_false(v):"""当 v 为 false 时返回 True:param v::return:"""return v is False# retry_if_not_result 结果为 true 则重试
@retry(retry=retry_if_result(is_false), stop=stop_after_attempt(3), wait=wait_fixed(2))
def aaa():return Falseaaa()

返回函数结果

# 通常情况下, 重试会返回 retryErr 的错误, 如果我们想拿到最初函数的结果就要这样写
def return_last_value(retry_state):return retry_state.outcome.result()@retry(retry=retry_if_result(is_false), stop=(stop_after_delay(10)|stop_after_attempt(3)), wait=wait_fixed(2), retry_error_callback=return_last_value)
def aaa():print(123)sleep(2)return Falseaaa()

Python学习 之 tenacity重试模块相关推荐

  1. python学习笔记4(模块

    python学习笔记4(模块) 一.模块 1.1 import语句 1.2 __name__属性 1.3 dir()函数 1.4 包 2.1 导入特定模块: 二.输入与输出 2.1 format使用 ...

  2. python 学习_第五模块 DMO

    python 学习_第五模块 DMO 1. 节点 <!DOCTYPE html> <html lang="en"> <head><meta ...

  3. Python: 学习系列之七:模块、PIPY及Anaconda

    系列 Python: 学习系列之一:Python能做什么 Python: 学习系列之二:基础介绍(int/float/string/range/list/tuple/dict/set) Python: ...

  4. Python学习(六)模块

    Python 模块 模块定义 随着程序越来越庞大,需要分隔成几个文件:也需要能在不同文件中复用函数.类和变量,而不是拷贝代码.为了满足这些需要,Python提供了模块. 简单来说,模块就是一个保存了P ...

  5. Python学习笔记--day09 函数 模块 (文件、路径操作)

    第二模块 函数&模块 第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题. 函数,一个用于专门实现某个功能的代码块(可重用). 内置函数 len.bin ...

  6. Python学习-基础篇4 模块与包与常用模块

    一 模块介绍 1.什么是模块?#常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用.#在python中,模块的使用方 ...

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

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

  8. Python学习笔记__5章 模块

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,在Python中,一个.py文件就称之为 ...

  9. Python学习笔记之常用模块总结,持续更新...

    阅读目录 1. 时间模块--datetime 2. 文件目录操作模块--os 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经 ...

  10. Python学习——正则表达式与re模块实现字符串计算器

    学习了python的正则表达式后,一片懵逼,不知道干啥用的,也不知道咋用,只能放一些实例和正则表达式的规则以备后续查阅,希望在经过长时间的训练和使用后能对正则表达式有一个深刻的理解.什么是正则表达式呢 ...

最新文章

  1. 清华大学AMiner发布计算机科学会议(期刊)影响力排名
  2. 未转变者空投指令服务器,未转变者空投指令 | 手游网游页游攻略大全
  3. 开发者和程序员需要关注的42个播客
  4. 数据库:数据库水平切分?垂直切分?整合方案?可能存在的问题?
  5. wordpress常用插件打包 百度搜索推送插件+sitemap生成等
  6. 数字图像处理基本原理和常用方法
  7. 无向图的遍历_大鲨说算法与数据结构图(一)
  8. python语言变量随时命名随时赋值_Python变量及数据类型用法原理汇总
  9. mysql参数优化和硬件优化等分享
  10. Android应用保活方案的另类出路,让你应用长生不老,实战案例
  11. 思维导图的用处是什么?绘制思维导图技巧分享
  12. Axure rp 9安装包下载地址、汉化文件、授权码(包括下载地址)
  13. nRF52840 SAADC单通道/多通道采集分析
  14. 程序员这口饭,职业规划解决方案---程序员职业规划(二)
  15. xshell写JS脚本自动进行操作
  16. 开源项目Smail动工
  17. python停止运行_Python已停止工作,问题解决
  18. Siebel Open UI
  19. apk应用加固与重签名—使用AndroidStudio自带工具apksigner
  20. h5策划书_DIYH5|3.12世界睡眠日H5策划方案

热门文章

  1. TDMA解调接收机IP core
  2. 《REAL-TIME INDOOR SCENE RECONSTRUCTION WITH RGBD AND INERTIA INPUT 》 原文翻译与解读
  3. Web前端零基础入门HTML5+CSS3学习笔记补充
  4. 阿里云ODPS升级为一体化大数据平台 满足用户多元化数据计算需求
  5. 华为荣耀20和x10比较_华为畅享20plus和荣耀x10对比哪个好?入手哪一款更香
  6. GameCenter Achievement相关问题
  7. Distributing Ballot Boxes HDU - 4190【详细翻译】【贪心、二分】
  8. Jquery 中a||的含义
  9. Linux内核info leak漏洞
  10. html如何让字体变形,jquery实现字体变形特效-css字体变成圆形