Python Tenacity库重试机制实战指南

阿橙
阿橙
发布时间:2026-10-15| 6人浏览过
原创

本文详细介绍Python中Tenacity库的使用,涵盖无限重试、次数限制、时间控制、随机间隔及日志记录等核心功能。通过具体代码示例,展示如何在爬虫、测试用例及抢票场景中实现健壮的错误重试机制。

前言

Tenacity是一个基于Apache 2.0协议开源的通用重试库,由Python编写,旨在简化为各类程序添加重试逻辑的任务。该库源于一个已不再维护的分支项目,目前已成为Python生态中处理重试需求的常用工具。

使用

首先安装Tenacity


pip install Tenacity

无限重试

第一个重试案例,由于代码持续抛出异常错误,程序将无限进行重试执行。


from tenacity import retry

@retry()
def test_retry():
	print('失败重试中')
 raise Exception
 
test_retry()

成功则停止

我们来优化成功一次后程序则终止,否则继续重试。


from tenacity import retry
import random

@retry()
def test_retry():
 if random.randint(0,10) > 1:
  print('失败重试中')
  raise Exception
 else:
  print('成功')

test_retry()

重试次数

毕竟一直重试需要消耗很多资源,所以我们可以设置一些重试的次数,比如在失败多少次后停止重试,不管有没有成功。


from tenacity import retry,stop_after_attempt
import random

@retry(stop=stop_after_attempt(7))
def test_retry():
 # if random.randint(0,10) > 1:
  print('失败重试中')
  raise Exception
 # else:
 #  print('成功')

test_retry()

重试时间

也可以设置执行的时间


from tenacity import retry,stop_after_attempt,stop_after_delay
import random
from time import sleep
@retry(stop=stop_after_delay(3))
def test_retry():
 # if random.randint(0,10) > 1:
  sleep(1)
  print('失败重试中')
  raise Exception
 # else:
 #  print('成功')

test_retry()

条件组合

甚至可以使用多个组合条件进行停止,哪个条件先触发则执行哪个


from tenacity import retry,stop_after_attempt,stop_after_delay
import random
from time import sleep
@retry(stop=stop_after_delay(3) | stop_after_attempt(2))
def test_retry():
 # if random.randint(0,10) > 1:
  sleep(1)
  print('失败重试中')
  raise Exception
 # else:
 #  print('成功')

test_retry()

重试间隔

重试之间的间隔时间太短,所以让我们在重试之间等待2秒钟


from tenacity import retry,stop_after_attempt,stop_after_delay,wait_fixed
import random
import time
@retry(wait=wait_fixed(2))
def test_retry():
 # if random.randint(0,10) > 1:
  print('失败重试中')
  print(time.ctime())
  raise Exception
 # else:
 #  print('成功')

test_retry()

重试随机间隔

我们还可以设置一些等待时间范围


from tenacity import retry,stop_after_attempt,stop_after_delay,wait_fixed,wait_random
import random
import time
@retry(wait=wait_random(min=1,max=2))
def test_retry():
 # if random.randint(0,10) > 1:
  print('失败重试中')
  print(time.ctime())
  raise Exception
 # else:
 #  print('成功')

test_retry()

重试前日志

在执行之前打印日志


from tenacity import retry,stop_after_attempt,before_log
import logging
import sys

logging.basicConfig(stream=sys.stderr,level=logging.DEBUG)
logger = logging.getLogger(__name__)

@retry(stop=stop_after_attempt(3),before=before_log(logger,logging.DEBUG))
def test_retry():
 print('失败重试中')
 raise Exception('Fail')

test_retry()

重试后日志

那么相同的,可以在执行失败后打印日志


from tenacity import retry,stop_after_attempt,after_log
import logging
import sys

logging.basicConfig(stream=sys.stderr,level=logging.DEBUG)
logger = logging.getLogger(__name__)

@retry(stop=stop_after_attempt(3),after=after_log(logger,logging.DEBUG))
def test_retry():
 print('失败重试中')
 raise Exception('Fail')

test_retry()

基本常用的功能就这些了,如果有需要深入了解的可以访问github地址:https://github.com/jd/tenacity

到此这篇关于关于Python错误重试方法总结的文章就介绍到这了,更多相关Python错误重试方法内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。