有朋友安利了一下Tenacity, 特别好用, 提供了简单易使用的通用装饰器API
官方文档: https://tenacity.readthedocs.io/en/latest/
import random
from tenacity import retry, stop_after_attempt
# 限定重试5次
@retry(stop=stop_after_attempt(5))
def do_something_unreliable():
num = random.randint(0, 10)
print(num)
if num > 1:
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"
print(do_something_unreliable())
基本所有的api都是在装饰器里面实现, 还可以多种api任意组合使用, 支持自定义回调和asyncio
官方文档写的很详细了, 而且有对应的例子, 直接看官方文档然后用起来吧