广告
返回顶部
首页 > 资讯 > 后端开发 > Python >一文详解Python中的重试机制
  • 279
分享到

一文详解Python中的重试机制

2024-04-02 19:04:59 279人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录介绍1. 最基本的重试2. 设置停止基本条件3. 设置何时进行重试4. 重试后错误重新抛出5. 设置回调函数介绍 为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。比如

介绍

为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题。

这种情况下,我们通常会在代码中加入重试的代码。重试的代码本身不难实现,但如何写得优雅、易用,是我们要考虑的问题。

这里要给大家介绍的是一个第三方库 - Tenacity (标题中的重试机制并并不准确,它不是 python 的内置模块,因此并不能称之为机制),它实现了几乎我们可以使用到的所有重试场景,喜欢记得收藏、关注、点赞。

比如:

在什么情况下才进行重试?

重试几次呢?

重试多久后结束?

每次重试的间隔多长呢?

重试失败后的回调?

在使用它之前 ,先要安装它

$ pip install tenacity

1. 最基本的重试

无条件重试,重试之间无间隔

from tenacity import retry

@retry
def test_retry():
    print("等待重试,重试无间隔执行...")
    raise Exception

test_retry()

无条件重试,但是在重试之前要等待 2 秒

from tenacity import retry, wait_fixed

@retry(wait=wait_fixed(2))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

2. 设置停止基本条件

只重试7 次

from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(7))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

重试 10 秒后不再重试

from tenacity import retry, stop_after_delay

@retry(stop=stop_after_delay(10))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

或者上面两个条件满足一个就结束重试

from tenacity import retry, stop_after_delay, stop_after_attempt

@retry(stop=(stop_after_delay(10) | stop_after_attempt(7)))
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

3. 设置何时进行重试

在出现特定错误/异常(比如请求超时)的情况下,再进行重试

from requests import exceptions
from tenacity import retry, retry_if_exception_type

@retry(retry=retry_if_exception_type(exceptions.Timeout))
def test_retry():
    print("等待重试...")
    raise exceptions.Timeout

test_retry()

在满足自定义条件时,再进行重试。

如下示例,当 test_retry 函数返回值为 False 时,再进行重试

from tenacity import retry, stop_after_attempt, retry_if_result

def is_false(value):
    return value is False

@retry(stop=stop_after_attempt(3),
       retry=retry_if_result(is_false))
def test_retry():
    return False

test_retry()

4. 重试后错误重新抛出

当出现异常后,tenacity 会进行重试,若重试后还是失败,默认情况下,往上抛出的异常会变成 RetryError,而不是最根本的原因。

因此可以加一个参数(reraise=True),使得当重试失败后,往外抛出的异常还是原来的那个。

from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(7), reraise=True)
def test_retry():
    print("等待重试...")
    raise Exception

test_retry()

5. 设置回调函数

当最后一次重试失败后,可以执行一个回调函数

from tenacity import *

def return_last_value(retry_state):
    print("执行回调函数")
    return retry_state.outcome.result()  # 表示返回原函数的返回值

def is_false(value):
    return value is False

@retry(stop=stop_after_attempt(3),
       retry_error_callback=return_last_value,
       retry=retry_if_result(is_false))
def test_retry():
    print("等待重试中...")
    return False

print(test_retry())

输出如下

等待重试中...
等待重试中...
等待重试中...
执行回调函数
False

到此这篇关于一文详解Python中的重试机制的文章就介绍到这了,更多相关Python重试机制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文详解Python中的重试机制

本文链接: https://www.lsjlt.com/news/119261.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文详解Python中的重试机制
    目录介绍1. 最基本的重试2. 设置停止基本条件3. 设置何时进行重试4. 重试后错误重新抛出5. 设置回调函数介绍 为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。比如...
    99+
    2022-11-11
  • Python retrying 重试机制详解
    目录循环加判断retrying总结 我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求的代码片段就需要加上重试机制。下面来...
    99+
    2022-11-12
  • 一文详解Go语言中的锁机制
    作为一门高并发的编程语言,Go语言的并发控制机制非常重要。其中最常用的机制之一就是锁机制。本文将介绍如何在Go语言中实现锁机制。Go语言的锁在Go语言中,最常用的锁是互斥锁(Mutex)。互斥锁是一种特殊的二进制信号量,用于控制对共享资源的...
    99+
    2023-05-14
  • 一文详解Java中的类加载机制
    目录一、前言二、类加载的时机2.1 类加载过程2.2 什么时候类初始化2.3 被动引用不会初始化三、类加载的过程3.1 加载3.2 验证3.3 准备3.4 解析3.5 初始化四、父类...
    99+
    2022-11-13
  • 一文详解Qt中的对象树机制
    Qt提供了对象树机制,能够自动、有效的组织和管理继承自QObject的Qt对象。 每个继承自QObject类的对象通过它的对象链表(QObjectList)来管理子类对象,当用户创建...
    99+
    2023-03-21
    Qt对象树机制使用 Qt对象树机制 Qt对象树
  • 【重试】Java 中的 7 种重试机制
    随着互联网的发展项目中的业务功能越来越复杂,有一些基础服务我们不可避免的会去调用一些第三方的接口或者公司内其他项目中提供的服务,但是远程服务的健壮性和网络稳定性都是不可控因素。在测试阶段可能没有什么异常情况,但上线后可能会出现调用的接口因为...
    99+
    2023-08-21
    java php 开发语言
  • Vue超详细讲解重试机制示例
    重试指的是当加载出错时,有能力重新发起加载组件的请求。 异步组件加载失败后的重试机制,与请求服务端接口失败后的重试机制一样。所以,先来讨论接口请求失败后的重试机制是如何实现的, 为此...
    99+
    2023-01-05
    Vue重试机制 Vue重试
  • 一文详解JS中的事件循环机制
    目录前言1、JavaScript是单线程的2、同步和异步3、事件循环前言 我们知道JavaScript 是单线程的编程语言,只能同一时间内做一件事,按顺序来处理事件,但是在遇到异步事...
    99+
    2022-11-13
  • Python中retrying重试机制的示例分析
    这篇文章主要介绍了Python中retrying重试机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。循环加判断最简单的重试方式就是在需要进行重试的代码片段上加一个...
    99+
    2023-06-21
  • 一文理解Python命名机制
    目录1、初探2、迷踪3、探究4、真相猜测下面这段程序的输出: class A(object): def __init__(self): ...
    99+
    2022-11-12
  • RocketMq消息重试机制及死信队列详解
    目录生产者消息重试消费者消息重试并发消费顺序消费并发消费和顺序消费区别死信队列实践出真知公共部分创建测试并发消费并发消费状态测试顺序消费顺序消费状态测试死信队列死信队列特性生产者消息...
    99+
    2022-11-13
  • Python中异常重试的解决方案详解
    前言 大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理。 原先的流程: def crawl_page(url): pass def l...
    99+
    2022-06-04
    重试 详解 异常
  • 详解bash中的脚本调试机制
    以调试模式运行脚本 通过bash -x <script>的方式可以在调试模式下运行整个脚本, bash会在在运行前打印出了每一行命令, 而且每行前面用+号表明命令的嵌套层数. > bash -x ...
    99+
    2022-06-04
    bash 脚本调试
  • Python中import机制详解
    Python语言中import的使用很简单,直接使用 import module_name 语句导入即可。这里我主要写一下"import"的本质。 Python官方 定义:Python code in on...
    99+
    2022-06-04
    详解 机制 Python
  • Python retrying 重试机制的使用方法
    目录循环加判断 retrying 我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求的代码片段就需要加上重试机制。下面来说...
    99+
    2022-11-12
  • 一文详解测试Python读写xml配置文件
    前言: xml也是常用的配置文件格式之一,Python中的xml.etree.ElementTree模块支持解析和创建xml数据。xml格式不再赘述,本文采用参考文献1中的示例xml...
    99+
    2022-11-11
  • JS面试之异步模拟超时重传机制详解
    目录引言题目分析代码设计核心讲解引言 前面我讲解了两篇有关异步的逻辑思维题目,一个是红绿灯转换,还有一个是异步并发限制。有小伙伴私信我说不过瘾,希望还能再出一篇异步超时重传的讲解。为...
    99+
    2022-11-13
  • 一文详解Python中的super 函数
    目录实战场景实战编码单继承使用实战场景 经常有朋友问,学 Python 面向对象时,翻阅别人代码,会发现一个 super() 函数,那这个函数的作用到底是什么? super() 函数...
    99+
    2022-11-11
  • python的广播机制详解
    目录为什么会有广播机制在矩阵或向量相关运算中的广播机制1、一般的运算2、一个矩阵一个向量的情况3、两个向量4、矩阵乘法的广播机制总结为什么会有广播机制 python语言在设计的时候,...
    99+
    2022-11-12
  • python异常和文件处理机制详解
    本文实例讲述了python异常和文件处理机制。分享给大家供大家参考,具体如下: 1 异常处理 Python的异常用 try except finally 来处理. 并且except后还可以跟 else . ...
    99+
    2022-06-04
    详解 异常 机制
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作