RetryPolicy¶
from cascaqit import RetryPolicy
RetryPolicy ¶
RetryPolicy(
max_attempts: int = 1,
timeout_seconds: float | None = None,
backoff_strategy: RetryBackoffStrategy = "none",
backoff_seconds: float = 0.0,
max_backoff_seconds: float | None = None,
retryable_error_codes: tuple[str, ...] = (),
non_retryable_error_codes: tuple[str, ...] = (),
schema_version: str = SCHEMA_VERSION,
)
定义持久化本地任务的重试次数、退避与错误码规则,传给 LocalBackend(store=...).run(retry=...)。max_attempts 包含第一次执行,默认 1 即不重试。创建策略本身不会运行任务。
backoff_strategy 支持 none、fixed、exponential;backoff_seconds 必须非负,max_backoff_seconds 可限制最长等待且不能小于基础等待。retryable_error_codes 与 non_retryable_error_codes 不能重叠,未列出的错误沿用异常本身的重试标记。
timeout_seconds 可保存正数超时声明,但当前持久化本地执行器没有消费这个字段;它不会中断超时计算。不要用它作为本地任务的时间上限。
from cascaqit import RetryPolicy
policy = RetryPolicy(max_attempts=4, backoff_strategy="exponential",
backoff_seconds=0.5, max_backoff_seconds=1.0,
retryable_error_codes=("TEMPORARY",))
assert [policy.attempt_backoff_seconds(i) for i in range(1, 5)] == [0, 0.5, 1, 1]
assert policy.is_retryable_code("TEMPORARY") is True
assert policy.is_retryable_code("OTHER") is None
assert RetryPolicy.from_json(policy.to_json()) == policy
按从 1 开始的尝试编号返回等待秒数,不实际等待。第一次或 none 策略返回 0;fixed 返回基础等待;exponential 从第二次的基础等待开始,每次翻倍,再应用上限。非正整数编号会报错。
错误码在禁止列表中返回 False,在允许列表中返回 True,其余返回 None,表示没有覆盖规则。None 不等于禁止重试。
从字典还原 RetryPolicy。还原退避与错误码列表,并重新校验参数。 缺少必需字段或字段不合法时可能抛出 KeyError、TypeError 或 ValueError。
解析 JSON 对象并调用 from_dict(),返回 RetryPolicy。非法 JSON 会抛出解析错误;顶层不是对象时抛出 TypeError。
返回可写入 JSON 的字典,嵌套对象一并序列化。元组转成数组;这个字典是保存的声明,不是执行结果。
返回 JSON 字符串,不写文件。indent=None 使用紧凑格式;提供缩进宽度可便于阅读。
返回规范 JSON 的 SHA-256 十六进制摘要。字段、标识或元数据变化都可能改变摘要;它用于比较保存内容,不判断两个声明在物理上是否等价。