溪客(编程代码) 溪客(编程代码)

  • 今天是2025年08月20日 Wednesday
  • 首页
  • 知识
  • 网址
  • AI助手

Python

首页 / 知识 / Python
  • 基础
    • Conda
    • Jupyter
    • dump
    • CSharp2Python
    • 关于模块导入
    • 关于推导式
    • 关于元组
    • set和数组的区别
    • 关于Literal
    • 关于iter
    • 关于setup.py
    • 路径拼接
    • 方法命名约定
  • 库
    • 其他
    • argparse命令行参数解析
    • asyncio自带异步编程库
    • aiofiles异步文件读写库
    • beautifulsoup4_HTML_XML解析库
    • colorama_在终端输出漂亮的字
    • datasets数据集处理
    • html2text
    • httpx_HTTP请求库
    • litellm
    • loguru日志库
    • numpy科学计算基础库
    • pillow图像处理
    • pydantic数据验证
    • pyyaml
    • requests_HTTP请求库
    • tenacity重试
    • tiktoken计算Token量
    • torch机器学习_深度学习框架
    • tomli TOML文件解析库
    • tomllib 自带TOML文件解析库
    • unidiff_文本_文件差异对比
    • uvicorn_Web服务器
  • langchain
    • langchain-chatchat
    • langchain-qianfan
**Tenacity** 是 Python 的一个第三方库,用于实现 **重试机制(retry)**,即当某段代码执行失败时,自动进行**重复尝试(重试)**,直到成功或达到最大重试次数。 --- ## 一、Tenacity 是什么?(通俗理解) - 想象你在调用一个可能失败的函数,比如: - 请求一个不稳定的 API - 连接一个可能暂时不可用的数据库 - 读写一个可能被占用的文件 - 如果第一次失败了,你可能想 **自动重试几次**,而不是立刻报错退出。 - **Tenacity 就是帮你自动实现这种“失败后重试”逻辑的 Python 工具库。** --- ## 二、为什么需要 Tenacity? 在真实开发中,很多操作可能会因为网络抖动、资源忙、服务暂时不可用等原因**失败一次或几次,但稍后重试可能就成功了**。 手动写重试逻辑(比如 try-except + 循环)会很繁琐,而且难以控制: - 重试多少次? - 每次间隔多久? - 什么异常才重试? - 达到最大次数后怎么办? **Tenacity 就是为了解决这些问题,提供了一种优雅、灵活、强大的方式来实现重试机制。** --- ## 三、Tenacity 的核心功能 使用 Tenacity,你可以轻松为任何函数添加重试行为,并且可以自定义: | 功能 | 说明 | |------|------| | **自动重试** | 当函数抛出异常时,自动重新调用该函数 | | **设置重试次数** | 最多重试几次,比如最多重试 5 次 | | **设置重试间隔** | 每次重试之间等待多久,比如等 2 秒再试 | | **指数退避(Exponential Backoff)** | 每次重试的间隔时间逐渐增加,减轻服务器压力 | | **根据异常类型重试** | 只对某些特定的异常(如网络错误)进行重试 | | **重试条件控制** | 可以自定义什么时候才触发重试 | | **重试停止条件** | 达到某种条件后停止重试,比如成功了、超过最大次数等 | | **重试日志与回调** | 可以记录重试过程,或在重试前后执行额外逻辑 | --- ## 四、安装 Tenacity 使用 pip 安装: ```bash pip install tenacity ``` --- ## 五、简单使用示例 ### 示例 1:基本重试(失败后自动重试 3 次) ```python from tenacity import retry, stop_after_attempt import time @retry(stop=stop_after_attempt(3)) # 最多重试 3 次 def 可能失败的操作(): print("尝试执行...") raise Exception("模拟失败!") # 模拟一个异常 可能失败的操作() ``` **运行结果:** 函数会尝试执行 3 次,每次都失败,最后抛出异常。 --- ### 示例 2:带等待的重试(每次失败后等 2 秒) ```python from tenacity import retry, stop_after_attempt, wait_fixed import time @retry(stop=stop_after_attempt(3), wait=wait_fixed(2)) # 每次等 2 秒 def 可能失败的操作(): print("尝试执行...") raise Exception("模拟失败!") 可能失败的操作() ``` **效果:** 每次失败后,等待 2 秒再重试,总共最多重试 3 次。 --- ### 示例 3:只对特定异常重试 ```python from tenacity import retry, stop_after_attempt, wait_fixed import requests @retry(stop=stop_after_attempt(3), wait=wait_fixed(1)) def 请求接口(): response = requests.get("https://不存在的网址.com") response.raise_for_status() # 如果 HTTP 请求失败,抛出异常 请求接口() # 只有 requests 相关的异常会触发重试 ``` --- ## 六、总结(中文) > **Tenacity 是 Python 中专门用来实现函数重试机制的库,它让“失败后自动重试”变得非常简单、灵活和强大。** > > 适用于网络请求、数据库连接、文件操作等可能临时失败但可恢复的场景。 > > 主要优点: > - 简单易用(通过装饰器即可实现) > - 功能强大(支持自定义重试次数、间隔、异常类型等) > - 可靠稳定(适合生产环境使用) 如果你想在 Python 中为某个可能失败的操作添加“失败后自动重试”的功能,**Tenacity 是首选工具**。
© 2022 - 溪客(编程代码) - 粤ICP备10217501号 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)