[python3] 处理函数的重试

tenacity是一个 Python 库,用于简化重试逻辑的实现。它提供了装饰器和工具函数,使得在函数执行失败时可以自动重试。以下是对tenacity库的详细介绍:

一、安装

可以使用pip安装tenacity

pip install tenacity

二、主要概念和功能

  1. 装饰器

    • @retry:这是最常用的装饰器,用于在函数执行失败时自动重试。可以通过参数配置重试的条件、次数、延迟等。
    • @retry_always:无论函数执行结果如何,始终重试。
    • @retry_if_exception_type:根据异常类型决定是否重试。例如,可以指定只在特定类型的异常发生时重试。
  2. 重试条件

    • retry(wait=...):指定重试之间的等待时间。可以使用内置的等待策略,如指数退避(wait_exponential)、固定等待时间(wait_fixed)等。
    • retry(stop=...):定义重试的停止条件。可以设置最大重试次数(stop_max_attempt_number)、最大等待时间(stop_max_delay)等。
    • retry(retry=...):自定义重试的条件函数。该函数接收一个参数,表示上一次执行的结果,如果返回True则重试,否则停止。
  3. 异常处理

    • retry_if_exception_type(...):指定在特定类型的异常发生时重试。可以传入一个或多个异常类型。
    • retry_if_not_result(...):根据函数的返回值决定是否重试。例如,可以检查返回值是否为None或满足其他条件。
  4. 回调函数

    • retry(after=...):在每次重试后执行一个回调函数。可以用于记录日志、发送通知等。
    • retry(before=...):在每次重试前执行一个回调函数。可以用于准备资源、设置状态等。

三、使用示例

  1. 基本重试:
import tenacity
import random@tenacity.retry
def some_function():result = random.randint(1, 10)if result < 5:raise Exception("Failed.")else:return resulttry:print(some_function())
except Exception as e:print(f"Final failure: {e}")

在这个例子中,some_function会在返回值小于 5 时抛出异常并自动重试,直到返回值大于等于 5。

  1. 自定义重试条件和等待时间:
import tenacity
import timedef is_failure(result):return result is False@tenacity.retry(wait=tenacity.wait_fixed(2), retry=tenacity.retry_if_result(is_failure))
def another_function():result = random.choice([True, False])print(f"Result: {result}")return resulttry:another_function()
except Exception as e:print(f"Final failure: {e}")

在这个例子中,another_function会在返回值为False时重试,每次重试之间等待 2 秒。自定义的重试条件函数is_failure根据返回值决定是否重试。

  1. 使用回调函数:
import tenacity
import loggingdef log_retry(retry_state):logging.info(f"Retrying {retry_state.fn.__name__}, attempt #{retry_state.attempt_number}")@tenacity.retry(wait=tenacity.wait_exponential(multiplier=1, min=2, max=10), after=log_retry)
def yet_another_function():result = random.randint(1, 10)if result < 5:raise Exception("Failed.")else:return resulttry:yet_another_function()
except Exception as e:print(f"Final failure: {e}")

在这个例子中,yet_another_function在失败时会按照指数退避策略重试,每次重试后会调用log_retry回调函数记录重试信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145949.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

变压器空载时是否有必要做无功补偿

在电力系统中&#xff0c;变压器作为关键设备之一&#xff0c;其运行状态对整个系统的功率质量和效率具有重要影响。关于“变压器空载时是否有必要做无功补偿”这一问题&#xff0c;答案取决于具体的应用场景、系统需求以及经济性考虑。以下将从变压器空载特性、无功补偿的原理…

360手机黑科技“位置穿越”功能修复 360位置穿越使用

​ 360手机刷机 360手机黑科技 360手机位置穿越 360手机位置修复 360手机站&#xff1a;360os.top 资源免费下载: os.360os.top 备用资源站&#xff1a;360手机-360手机刷机RootTwrp 360手机位置穿越 360手机位置穿越‌&#xff0c;是一款虚拟定位软件&#xff0c;无需进行r…

毕业设计选题:基于springboot+vue+uniapp的驾校报名小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

块匹配算法简介(上)

图像中的运动估计方法大致分为两类:光流法和块匹配算法(BMA,Block Matching Algorithm)。本文将介绍BMA的相关内容,包括基本原理、相似度计算准则与常见的几种搜索方法,如三步法、四步法、钻石搜索法等。 1. 背景 视频中相邻帧往往存在大量的相似内容,即只有局部的一些…

算法课习题汇总(2)

整数划分问题 将正整数n表示成一系列正整数之和&#xff0c;nn1n2…nk(n1>n2>…>nk,k>1)。正整数n的这种表示称为正整数n的划分。 思路&#xff1a; n表示待划分数&#xff0c;m表示最大减数。 #include<iostream> using namespace std;int q(int n, int…

JIT(即时编译)技术

介绍一下JIT优化技术&#xff1f; 想要把高级语言转变成计算机认识的机器语言有两种方式&#xff0c;分别是编译和解释&#xff0c;虽然Java转成机器语言的过程中有一个步骤是要编译成字节码&#xff0c;但是&#xff0c;这里的字节码并不能在机器上直接执行。 JVM中内置了 解释…

记软件开发者画图(UML),使用WPS应用制图

目录 前言 一、什么是UML 二、使用什么画图工具 三、示例 ​四、IntelliJ IDEA 2021快速生成UML图 前言 做软件开发的从写第一个示例程序到最后写项目程序避不开的需要设计画图&#xff0c;所以今天我们就来梳理一下‌UML&#xff08;统一建模语言&#xff09;图形需要画…

LINUX网络编程:TCP(1)

目录 1.认识Tcp的报头 2.确认应答机制&#xff08;ACK&#xff09; 序号与确认序号 捎带应答 3.超时重传机制 4.Tcp连接管理 三次握手 为什是三次握手 四次挥手 理解TIMEWAIT 1.认识Tcp的报头 源端口和目的端口号没什么说的 32位的序号和确认序号&#xff0c;之后会介…

T9-猫狗识别2(暂时版qaq)

T9周&#xff1a;猫狗识别2 **一、前期工作**1.设置GPU,导入库2.导入数据3.查看数据 **二、数据预处理**1.加载数据2.可视化数据3.配置数据集 **三、构建CNN网络模型****四、编译模型****五、训练模型****六、模型评估****七、预测**八、总结&#xff08;暂时&#xff09; &…

倒排索引(反向索引)

倒排索引&#xff08;Inverted Index&#xff09;是搜索引擎和数据库管理系统中常用的一种数据结构&#xff0c;用于快速检索文档集合中的文档。在全文搜索场景中&#xff0c;倒排索引是一种非常高效的手段&#xff0c;因为它能够快速定位到包含特定关键词的所有文档。 1、基本…

【Python技术】使用akshare、pyecharts绘制K线图

下班回到家&#xff0c;回家途中瞄了下股票&#xff0c;大盘又是3000多只股票待涨&#xff0c; 盘中上证指数一度跌破2700。 估计不少人心里不爽&#xff0c;那就聊聊相关技术学习下。 之前写过【python技术】使用akshare、pandas、mplfinance绘制红绿色K线图简单示例 &#x…

Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?

目录 一、Retrofit是什么? Retrofit是一个基于OKHttp的RESTful网络请求框架,由Square公司开源,专为Android和Java提供类型安全的HTTP客户端。它可以理解为OKHttp的加强版,底层封装了OKHttp,主要负责网络请求接口的封装,使得网络请求工作更加简洁高效。 简单来说,Retro…

GNN-RAG:用于大模型推理的图神经检索

GNN-RAG&#xff1a;用于大模型推理的图神经检索 秒懂大纲提出背景解法拆解全流程优化创意总结 论文&#xff1a;GNN-RAG: Graph Neural Retrieval for Large Language Model Reasoning 代码&#xff1a;https://github.com/cmavro/GNN-RAG 秒懂大纲 ├── GNN-RAG【主题】…

医疗领域患者监控中的手势识别:一种深度卷积神经网络方法

这篇论文的标题是《Hand Gesture Recognition for Patient Monitoring in the Medical Field: A Deep Convolution Neural Networks Approach》&#xff0c;作者们来自印度的Chaitanya Bharathi Institute of Technology电子与通信工程系。论文主要探讨了在医疗领域&#xff0c…

AI大模型之旅--milvus向量库安装

milvus-向量索引库 milvus的官方文档中看到最新版本的部署方式 :https://milvus.io/docs/install_standalone-docker.md 部署 curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh 如果下载不下来&a…

C语言中值传递

C语言中&#xff0c;值传递的问题 #include <stdio.h> void modifyValue(int x) { x 10; // 修改的是x的副本&#xff0c;对原始数据无影响 printf("在函数中修改的结果是:%d\n",x); }int main() { int a 5; printf("Before: %d\n", a); modifyV…

基于协同过滤+SpringBoot+Vue的剧本杀服务平台系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤JavaSpringBootV…

zynq SDK 关于SD卡报错

在修改了BD的部分代码之后&#xff0c;重新综合工程生成bit&#xff0c;之后刷新hdf文件&#xff0c;在SDK端就出现了SD卡相关的函数未定义的报错&#xff1a; Description Resource Path Location Type E:\Work\VivadoPrj\Prj1\project_1\project_1.sdk\Test\Debug/…/src/hel…

29. 查看threejs自带几何体顶点

查看three.js自带几何体顶点结构&#xff0c;基类(父类)BufferGeometry three.js提供的矩形平面PlaneGeometry、长方体BoxGeometry、球体SphereGeometry等各种形状的几何体&#xff0c;他们都有一个共同的父类BufferGeometry。这意味着这些几何体有哪些属性或方法&#xff0c;…

Bigemap GIS Office 2024注册机 全能版地图下载软件

对于需要利用GIS信息进行编辑、设计的用户来说&#xff0c;Bigemap GIS Office占有重要地位。用户可以使用Bigemap GIS Office作为工具进行设计、分析、共享、管理和发布地理信息。Bigemap GIS Office能实现多种数据流转、嵌入、融合以及更多地为用户提供数据的增强处理及多种分…