Python利用tenacity库处理超时重试机制详解

 更新时间:2025年02月20日 08:49:46   作者:Y11_推特同名  
Python 的 tenacity 库用于实现重试机制,特别适合处理网络不稳定或其他意外错误导致的函数调用失败,下面我们就来看看它的具体使用吧

Python 的 tenacity 库用于实现重试机制,特别适合处理网络不稳定或其他意外错误导致的函数调用失败。以下是对其主要组件的简明介绍,以及实际应用示例和相应的代码。

组件说明

  • retry: 装饰器,用于标记需要重试的函数。当函数抛出异常时,tenacity 会根据设定的策略自动重试。
  • stop_after_attempt(n) : 设置最大重试次数,参数 n 表示在达到这个次数后停止重试。例如,stop_after_attempt(3) 表示最多重试三次。
  • wait_fixed(seconds) : 设置每次重试之间的固定等待时间,参数 seconds 指定等待的秒数。例如,wait_fixed(2) 表示在每次重试前等待两秒。

使用示例

下面是一个简单的示例,展示如何使用这些组件:

from tenacity import retry, stop_after_attempt, wait_fixed

@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
def test_function():
    print("尝试执行...")
    raise Exception("发生错误")

if __name__ == '__main__':
    try:
        test_function()
    except Exception as e:
        print(f"最终失败: {e}")

在这个示例中,test_function 被装饰为在发生异常时最多重试三次,每次重试之间等待两秒。如果三次尝试后仍然失败,程序会捕获并打印最终的错误信息。

实际应用场景

1.网络请求

在进行 API 调用时,如果请求失败(例如由于网络问题),可以使用 tenacity 自动重试。

示例代码:

import requests
from tenacity import retry, stop_after_attempt, wait_fixed

@retry(stop=stop_after_attempt(5), wait=wait_fixed(3))
def fetch_data(url):
    response = requests.get(url)
    response.raise_for_status()  # 如果响应状态码不是 200,将抛出异常
    return response.json()

url = "https://api.example.com/data"
try:
    data = fetch_data(url)
    print("数据获取成功:", data)
except Exception as e:
    print(f"数据获取失败: {e}")

2.文件操作

  • 在读取或写入文件时,如果遇到临时性错误(如文件被占用),可以通过重试来增加成功的机会。
  • 示例代码:
from tenacity import retry, stop_after_attempt, wait_fixed

@retry(stop=stop_after_attempt(3), wait=wait_fixed(1))
def read_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

try:
    content = read_file("example.txt")
    print("文件内容:", content)
except Exception as e:
    print(f"读取文件失败: {e}")

3.数据库操作

  • 在进行数据库事务时,如果由于连接问题导致失败,可以使用此机制进行重试。
  • 示例代码:
import sqlite3
from tenacity import retry, stop_after_attempt, wait_fixed

@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
def execute_query(query):
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    cursor.execute(query)
    conn.commit()
    conn.close()

try:
    execute_query("INSERT INTO users (name) VALUES ('Alice')")
    print("插入成功")
except Exception as e:
    print(f"数据库操作失败: {e}")

通过使用 tenacity 库,可以有效提高程序的健壮性,减少因临时性错误导致的失败。这些实际应用场景展示了如何在日常编程中利用该库来处理不稳定因素,从而提升用户体验和系统稳定性。

到此这篇关于Python利用tenacity库处理超时重试机制详解的文章就介绍到这了,更多相关Python tenacity重试机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • opencv基于Haar人脸检测和眼睛检测

    opencv基于Haar人脸检测和眼睛检测

    这篇文章主要为大家详细介绍了opencv基于Haar人脸检测和眼睛检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • python 图像处理画一个正弦函数代码实例

    python 图像处理画一个正弦函数代码实例

    这篇文章主要介绍了python 图像处理画一个正弦函数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python之使用adb shell命令启动应用的方法详解

    Python之使用adb shell命令启动应用的方法详解

    今天小编就为大家分享一篇Python之使用adb shell命令启动应用的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python读写JSON文件的操作详解

    Python读写JSON文件的操作详解

    JSON数据类型最常用的应用场景就是API或将数据保存到 .json稳当数据中。使用Python处理这些数据会变得非常简单,本文将详细讲解Python如何读写JSON文件的,需要的可以参考一下
    2022-04-04
  • Pandas多个条件(AND,OR,NOT)中提取行

    Pandas多个条件(AND,OR,NOT)中提取行

    本文主要介绍了Pandas多个条件(AND,OR,NOT)中提取行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • TensorFlow隐藏操作探索(张量操作和定制模型算法)

    TensorFlow隐藏操作探索(张量操作和定制模型算法)

    这篇文章主要为大家介绍了TensorFlow隐藏操作探索(张量操作和定制模型算法),有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 我喜欢你 抖音表白程序python版

    我喜欢你 抖音表白程序python版

    我喜欢你!这篇文章主要为大家详细介绍了抖音表白程序python版的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python pyqt5下拉多选框的实现示例

    Python pyqt5下拉多选框的实现示例

    QComboBox是一个集按钮和下拉选项于一体的控件,本文主要介绍了Python pyqt5下拉多选框的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • python控制台英汉汉英电子词典

    python控制台英汉汉英电子词典

    这篇文章主要为大家详细介绍了python控制台英汉汉英电子词典,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2014-06-06
  • Windows下用py2exe将Python程序打包成exe程序的教程

    Windows下用py2exe将Python程序打包成exe程序的教程

    这篇文章主要介绍了Windows下用py2exe将Python程序打包成exe程序的教程,文中主要针对Python3.x版本进行说明,需要的朋友可以参考下
    2015-04-04

最新评论