Python 错误重试库 tenacity retry

Tenacity是一个通用的retry库

安装

pip install tenacity

使用场景

1、无条件重试,重试之间无间隔

import tenacity

import requests

# 直接加上retry装饰器,代码抛出异常会一直重试,直到代码运行成功
@tenacity.retry()
def baidu():
   response = requests.get(url = 'http://www.baidu.com')
   if response.status_code == 200:
       return response.text
   raise Exception

res = baidu()
print(res)

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

from tenacity import retry , stop_after_attempt , stop_after_delay , wait_fixed
 
import requests
 
# 在程序重试前固定等待时间
@retry(wait = wait_fixed(3))
def baidu():
    web = requests.get(url = 'http://www.baidu.com')
    if web.status_code == 200:
        return web.text
    raise Exception
res = baidu()
print(res)
 

3、设置停止的基本条件,只重试3次,重试3次之后不再重试

from tenacity import retry,stop_after_attempt
 
import requests
 
# 加上终止条件的retry
# 重试三次之后不再重试
@retry(stop=stop_after_attempt(3))
def baidu():
    res = requests.get(url = 'http://www.baidu.com')
    if res.status_code == 200:
        return res.text
    raise Exception
 
web = baidu()
print(web)
 

4、重试5秒后不再重试

from tenacity import retry , stop_after_attempt , stop_after_delay
 
import requests
 
# 指定5s重试间隔
@retry(stop=stop_after_delay(5))
def baidu():
    web = requests.get(url = 'http://www.baidu.com')
    if web.status_code == 200:
        return web.text
    raise Exception
res = baidu()
print(res)
 

5、用|连接多个重试条件

from tenacity import retry , stop_after_attempt , stop_after_delay
 
import requests
 
# 使用'|' 连接多个条件组合使用
 #重试3次,每次间隔5秒
@retry(stop=stop_after_delay(5) | stop_after_attempt(3))
def baidu():
    web = requests.get(url = 'http://www.baidu.com')
    if web.status_code == 200:
        return web.text
    raise Exception
res = baidu()
print(res)
 

6、在重试前设置随机等待时间

from tenacity import retry , stop_after_attempt , stop_after_delay , wait_fixed , wait_random

import requests

# 在程序重试前设置随机等待时间
@retry(wait = wait_random(min=1,max=2))
def baidu():
   web = requests.get(url = 'http://www.baidu.com')
   if web.status_code == 200:
       return web.text
   raise Exception
res = baidu()
print(res)

7、按照指定数等待时间

from tenacity import retry , stop_after_attempt , stop_after_delay , wait_fixed , wait_random , wait_exponential
 
import requests
 
# 按照指定数等待时间
@retry(wait = wait_exponential(multiplier=2,min = 3,max = 100))
def baidu():
    web = requests.get(url = 'http://www.baidu.com')
    if web.status_code == 200:
        return web.text
    raise Exception
res = baidu()
print(res)
 

8、有触发条件的retry语句

from tenacity import retry ,retry_if_exception_type ,retry_if_result
 
import requests
 
# 有触发条件的retry语句
 
@ retry(retry = retry_if_exception_type(IOError))
def fun_1():
    print('巴拉巴拉巴拉巴拉')
    raise Exception
 
def fun_2(value):
    return value is None
 
@ retry(retry = retry_if_exception_type(fun_2))
def fun_3():
    print('滴滴滴滴滴')
 
@ retry(retry=(retry_if_result(fun_2)|retry_if_exception_type()))
def fun_4():
    print('呼呼呼呼呼呼')
 

9、 在retry前后增加log

from tenacity import retry , stop_after_attempt ,before_log ,after_log , before_sleep_log
import logging
 
logger = logging.getLogger(__name__)
 
@ retry(stop = stop_after_attempt(3),before = before_log(logger,logging.DEBUG))
def fun_1():
    raise Exception('Error')
 
@ retry(stop = stop_after_attempt(3),after = after_log(logger,logging.DEBUG))
def fun_2():
    raise Exception('Error')
@ retry(stop = stop_after_attempt(3),before_sleep = before_sleep_log(logger,logging.DEBUG))
def fun_3():
    raise Exception('Error')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生而为虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值