跳转到主要内容

生产级重试变得简单。

项目描述

stamina:生产级重试变得简单

在分布式系统中,短暂故障很常见。为了使您的系统具有弹性,您需要重试失败的操作。但不良的重试可能会使事情变得更糟。

stamina是围绕优秀的但无偏见的Tenacity包的一个有偏见的包装。我们的目标是尽可能的强健,同时默认做正确的事,并最大限度地减少误用的可能性。这是多年以来不断复制粘贴相同配置的结果。

  • 仅在特定异常或通过先使用谓词检查它们的子集时重试。
  • 重试间的指数退避,带有抖动。
  • 限制重试次数和总时间。
  • 自动支持异步(包括Trio)。
  • 保留装饰器可调用对象的类型提示。
  • 灵活的Prometheusstructlog和标准库的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


完整变更日志→

鸣谢

staminaHynek 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 查看哈希值)

上传于 Python 3

支持