新功能 (2026-06-19) — 韌性原語
可重用的韌性原語——retry-with-backoff 策略與斷路器(circuit breaker)
——並提供一個執行器指令,讓動作清單透過具名斷路器執行。純標準庫;兩個
原語都接受可注入的 sleep / clock,因此能做決定性單元測試。
(既有的 AC_retry 流程指令已能對動作 body 重試;本功能新增可重用的
RetryPolicy 可呼叫包裝器與全新的 CircuitBreaker。)
RetryPolicy
from je_auto_control import RetryPolicy, retry_call
RetryPolicy(max_attempts=5, backoff=0.1, multiplier=2.0).run(flaky_fn)
retry_call(flaky_fn, max_attempts=3) # 便利函式
在設定的 exceptions 上以指數退避重試 func``(``backoff *
multiplier**n,可用 max_backoff 上限夾限),嘗試耗盡後重新拋出最後
一個錯誤。
CircuitBreaker
from je_auto_control import CircuitBreaker, CircuitOpenError
breaker = CircuitBreaker(failure_threshold=5, reset_timeout=30.0)
try:
breaker.call(call_remote_service)
except CircuitOpenError:
... # 已短路——依賴掛了
連續失敗達 failure_threshold 次後開啟並短路(拋出
CircuitOpenError),直到 reset_timeout 過去後半開試一次;成功
即關閉。可避免重試風暴持續打掛已故障的依賴。
AC_circuit_call / ac_circuit_call 讓動作清單透過**具名**斷路器
執行(狀態跨呼叫共享),回傳 {state, record}。