【NB】Python “重试机制”

【NB】航心   ·   发表于 6个月前   ·   编程代码
上班啦[滑稽]
各位好久不见,我又来技术板块水贴了
════════════════
航心专用隔离线,防偷窥
════════════════
为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题。

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

这里要给大家介绍的是一个第三方库 - Tenacity (标题中的重试机制并并不准确,它不是 Python 的内置模块,因此并不能称之为机制),它实现了几乎我们可以使用到的所有重试场景,比如:

在什么情况下才进行重试?
重试几次呢?
重试多久后结束?
每次重试的间隔多长呢?
重试失败后的回调?
在使用它之前 ,先要安装它
楼更一一带你解答[酷]

20 Reply   |  Until 6个月前 | 1852 View

admin
发表于 6个月前

$ pip install tenacity

评论列表

  • 加载数据中...

编写评论内容

dokevike
发表于 6个月前

1. 最基本的重试
无条件重试,重试之间无间隔

评论列表

  • 加载数据中...

编写评论内容

1789137592
发表于 6个月前

from tenacity import retry

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

test_retry()

评论列表

  • 加载数据中...

编写评论内容

10086
发表于 6个月前

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

评论列表

  • 加载数据中...

编写评论内容

darkc
发表于 6个月前

from tenacity import retry, wait_fixed

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

test_retry()

评论列表

  • 加载数据中...

编写评论内容

敖老头
发表于 6个月前

2. 设置停止基本条件
只重试7 次

评论列表

  • 加载数据中...

编写评论内容

微梦
发表于 6个月前

from tenacity import retry, stop_after_attempt

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

test_retry()

评论列表

  • 加载数据中...

编写评论内容

天空丶泪
发表于 6个月前

重试 10 秒后不再重试

评论列表

  • 加载数据中...

编写评论内容

1789137592
发表于 6个月前

from tenacity import retry, stop_after_delay

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

test_retry()

评论列表

  • 加载数据中...

编写评论内容

柚子论坛
发表于 6个月前

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

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content