可靠性
为自家的可调用对象套上重试:
from automation_file import retry_on_transient
@retry_on_transient(max_attempts=5, backoff_base=0.5)
def flaky_network_call(): ...
该装饰器只重试 retriable=(…) 中明确列出的异常类型
(默认是 ConnectionError / TimeoutError / OSError)。
切勿放宽到裸 Exception——那会把逻辑 bug 当成瞬时失败掩盖掉。
重试耗尽后会抛出 RetryExhaustedException,
并通过 raise ... from err 链回最后一次原因。
为单个动作设置上限:
from automation_file import Quota
quota = Quota(max_bytes=50 * 1024 * 1024, max_seconds=30.0)
with quota.time_budget("bulk-upload"):
bulk_upload_work()
# 也可以直接装饰可调用对象:
@quota.wraps
def expensive(payload: bytes) -> None: ...
每个上限设置为 0 即表示禁用该项检查。