**backon** 是一个现代化的 Python (3.10+) 库,旨在为重试逻辑提供零依赖、指数退避(exponential backoff)的稳健解决方案。它作为传统库(如 `backoff`)的高性能、功能丰富的替代方案。
**主要特性:**
* **多功能 API:** 支持装饰器、函数调用、上下文管理器,并为同步和异步代码提供专用的迭代器 API。
* **高级策略:** 包含全面的等待生成器(指数、常量、斐波那契等)、抖动(jitter)支持,以及使用标准 Python 运算符(`|`, `&`)的可组合停止/重试条件。
* **企业级工具:** 内置对熔断器、请求对冲(request hedging)的支持,以及通过 Prometheus 和 OpenTelemetry 实现的可选可观测性。
* **开发者友好:** 功能包括实例级重试开关、用于测试的自定义睡眠注入、完整的类型提示以及对 Trio 的支持。
* **可观测性:** 提供丰富的回调(`on_attempt`、`on_backoff` 等)和执行统计信息。
**backon** 专为简洁和现代工作流而设计,是现有解决方案的近乎直接的替代品,在无需外部依赖的情况下,提供了更高的可扩展性和对复杂重试场景的内置支持。
作者反思了“休闲型”用户界面(例如智能手机上的照片编辑功能)往往无法顾及“情境化高阶用户”的需求。以旋转照片为例,作者对比了 iPhone 和安卓/Nothing Phone:前者会缓存快速点击的操作,而后者则会在动画进行期间忽略后续点击。
尽管对于单次编辑而言,这些设计差异似乎微不足道,但当用户需要处理数十张照片时,就会变得令人沮丧。作者认为,设计师往往将“休闲使用”误解为“简单使用”,却未能预见到用户何时需要快速执行重复性任务。
作者将此与“情境性残障”(即每个人在某些时刻都会面临可访问性挑战)的概念进行类比,提出休闲型界面应当具备与专业工具同等的稳健性。无论采用何种技术实现(缓存点击或加速动画),黄金法则始终是:**永远不要强迫用户等待动画结束。** 归根结底,优秀的设计必须尊重用户的意图与时间,因为即便是最休闲的界面,最终也会遇到要求专业级效率的用户。