PyBreaker 使用与技术文档
1. 安装指南
安装 PyBreaker 最简单的方式是使用 pip 工具从 PyPI 下载最新稳定版本:
pip install pybreaker
如果您是 Git 用户,并希望安装最新的开发版本,可以按照以下步骤操作:
git clone git://github.com/danielfm/pybreaker.git
cd pybreaker
# 在 Windows 下请省略 ./
./pw test
pip install -e .
2. 项目使用说明
PyBreaker 是一种 Python 实现的电路断路器模式,该模式在 Michael T. Nygard 的书籍 Release It!
中有所描述。电路断路器允许一个子系统在失败时不会破坏整个系统。这是通过在危险操作(通常是集成点)周围包装一个可以在系统不健康时绕过调用的组件来实现的。
使用方法
首先,为每个要保护的集成点创建一个 CircuitBreaker
实例:
import pybreaker
# 用于数据库集成点
db_breaker = pybreaker.CircuitBreaker(fail_max=5, reset_timeout=60)
CircuitBreaker
实例应该在应用程序范围内全局存在,例如,跨请求存在。
如果希望使用 Redis 作为后端存储,可以在初始化 CircuitBreaker
时指定一个 CircuitRedisStorage
:
import pybreaker
import redis
redis = redis.StrictRedis()
db_breaker = pybreaker.CircuitBreaker(
fail_max=5,
reset_timeout=60,
state_storage=pybreaker.CircuitRedisStorage(pybreaker.STATE_CLOSED, redis))
请注意,初始化 Redis 连接时不要将 decode_responses
设置为 True
,这会强制 redis 返回 ASCII 对象,并在 Python3+ 中因为 AttributeError: 'str' object has no attribute 'decode'
而失败。
事件监听
如果只是想要在特定事件发生时执行操作,无需子类化 CircuitBreaker
,而是子类化 CircuitBreakerListener
:
class DBListener(pybreaker.CircuitBreakerListener):
"执行数据库操作的监听器"
def before_call(self, cb, func, *args, **kwargs):
"在电路断路器 `cb` 调用 `func` 之前被调用"
pass
def state_change(self, cb, old_state, new_state):
"当电路断路器 `cb` 状态改变时被调用"
pass
def failure(self, cb, exc):
"当函数调用引发系统错误时被调用"
pass
def success(self, cb):
"当函数调用成功时被调用"
pass
电路断路器的工作原理
假设想要在更新数据库中的 customer
表的行时使用电路断路器:
@db_breaker
def update_customer(cust):
# 执行操作...
pass
# 将触发电路断路器
updated_customer = update_customer(my_customer)
如果不使用装饰器语法:
def update_customer(cust):
# 执行操作...
pass
# 将触发电路断路器
updated_customer = db_breaker.call(update_customer, my_customer)
或者,作为上下文管理器与 with
语句一起使用:
# 将触发电路断路器
with db_breaker.calling():
# 执行操作...
pass
根据默认参数,电路断路器 db_breaker
在 update_customer
中连续失败 5 次后将自动打开电路。
当电路打开时,所有对 update_customer
的调用都会立即失败(抛出 CircuitBreakerError
),而无需尝试执行实际操作。如果希望在电路跳闸时抛出原始错误,可以将 throw_new_error_on_trip
选项设置为 False
:
pybreaker.CircuitBreaker(..., throw_new_error_on_trip=False)
60 秒后,电路断路器将允许下一个对 update_customer
的调用通过。如果该调用成功,则电路关闭;如果失败,则电路再次打开,直到另一个超时过期。
3. 项目API使用文档
PyBreaker 提供了用于监控和更改其当前状态的属性和函数:
# 获取当前连续失败次数
print(db_breaker.fail_counter)
# 获取/设置最大连续失败次数
print(db_breaker.fail_max)
db_breaker.fail_max = 10
# 获取/设置当前重置超时时间(秒)
print(db_breaker.reset_timeout)
db_breaker.reset_timeout = 60
# 获取当前状态,即 'open', 'half-open', 'closed'
print(db_breaker.current_state)
# 关闭电路
db_breaker.close()
# 半开电路
db_breaker.half_open()
# 打开电路
db_breaker.open()
这些属性和函数应该被以某种方式暴露给运维人员,因为它们可以帮助他们检测系统中的问题。
4. 项目安装方式
请参考上述“安装指南”部分,获取 PyBreaker 的安装方法。
鸿蒙开发工具大赶集
本仓将收集和展示鸿蒙开发工具,欢迎大家踊跃投稿。通过pr附上您的工具介绍和使用指南,并加上工具对应的链接,通过的工具将会成功上架到我们社区。012hertz
Go 微服务 HTTP 框架,具有高易用性、高性能、高扩展性等特点。Go01每日精选项目
🔥🔥 每日精选已经升级为:【行业动态】,快去首页看看吧,后续都在【首页 - 行业动态】内更新,多条更新哦~🔥🔥 每日推荐行业内最新、增长最快的项目,快速了解行业最新热门项目动态~~029kitex
Go 微服务 RPC 框架,具有高性能、强可扩展的特点。Go00Cangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。Cangjie058毕方Talon工具
本工具是一个端到端的工具,用于项目的生成IR并自动进行缺陷检测。Python040PDFMathTranslate
PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/DockerPython06mybatis-plus
mybatis 增强工具包,简化 CRUD 操作。 文档 http://baomidou.com 低代码组件库 http://aizuda.comJava03国产编程语言蓝皮书
《国产编程语言蓝皮书》-编委会工作区018- DDeepSeek-R1探索新一代推理模型,DeepSeek-R1系列以大规模强化学习为基础,实现自主推理,表现卓越,推理行为强大且独特。开源共享,助力研究社区深入探索LLM推理能力,推动行业发展。【此简介由AI生成】Python00
热门内容推荐
最新内容推荐
项目优选








