Files
aitbc/apps/miner-node/src/aitbc_miner/util/backoff.py

20 lines
698 B
Python

from __future__ import annotations
import asyncio
import random
def compute_backoff(base: float, factor: float, jitter_pct: float, max_seconds: float) -> float:
backoff = min(base * factor, max_seconds)
jitter = backoff * (jitter_pct / 100.0)
return max(0.0, random.uniform(backoff - jitter, backoff + jitter))
def next_backoff(current: float, factor: float, jitter_pct: float, max_seconds: float) -> float:
return compute_backoff(current, factor, jitter_pct, max_seconds)
async def sleep_with_backoff(delay: float, factor: float, jitter_pct: float, max_seconds: float) -> float:
await asyncio.sleep(delay)
return next_backoff(delay, factor, jitter_pct, max_seconds)