生产级重试变得简单。
项目描述
stamina:生产级重试变得简单
在分布式系统中,短暂故障很常见。为了使您的系统具有弹性,您需要重试失败的操作。但不良的重试可能会使事情变得更糟。
stamina是围绕优秀的但无偏见的Tenacity包的一个有偏见的包装。我们的目标是尽可能的强健,同时默认做正确的事,并最大限度地减少误用的可能性。这是多年以来不断复制粘贴相同配置的结果。
- 仅在特定异常或通过先使用谓词检查它们的子集时重试。
- 重试间的指数退避,带有抖动。
- 限制重试次数和总时间。
- 自动支持异步(包括Trio)。
- 保留装饰器可调用对象的类型提示。
- 灵活的Prometheus、structlog和标准库的
logging
支持。 - 针对测试的专用支持,允许全局禁用重试、限制重试次数或移除退避。
例如
import httpx
import stamina
@stamina.retry(on=httpx.HTTPError, attempts=3)
def do_it(code: int) -> httpx.Response:
resp = httpx.get(f"https://httpbin.org/status/{code}")
resp.raise_for_status()
return resp
异步可调用对象使用相同的API,也可以重试任意块。查看我们的教程以获取更多示例!
发布信息
新增
-
所有重试函数中的on参数现在可以是一个可调用对象,它接受一个异常并返回一个布尔值,该值决定是否安排重试。#70
-
stamina.Attempt
现在有一个next_wait
属性,它包含如果当前尝试失败(不包括抖动)时下一个退避将等待的时间。#72 -
现在可以使用
stamina.set_testing()
将stamina切换到测试模式。它禁用退避并限制重试次数。#73
鸣谢
stamina由Hynek Schlawack编写,并按照MIT许可证分发。
开发得到了我的雇主Variomedia AG以及所有我惊人的GitHub Sponsors的支持。
没有Tenacity多年来的不可思议的工作,这个项目将无法实现。
stamina企业版
作为Tidelift Subscription的一部分提供。
stamina的维护者以及数千个其他包的维护者正在与Tidelift合作,为您使用的开源软件包提供商业支持和维护。节省时间,降低风险,并提高代码质量,同时支付您确切使用的包的维护者。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
stamina-24.3.0.tar.gz (558.5 kB 查看哈希值)
构建分布
stamina-24.3.0-py3-none-any.whl (16.4 kB 查看哈希值)