stremio-sekai/utils/rate_limiter.py
2025-10-31 19:03:17 +01:00

46 lines
1.2 KiB
Python

"""
Rate limiting utility to prevent overloading target servers.
"""
import time
import random
from typing import Optional
class RateLimiter:
"""
Simple rate limiter with random jitter to avoid detection.
"""
def __init__(self, min_delay: float = 1.0, max_delay: Optional[float] = None):
"""
Initialize rate limiter.
Args:
min_delay: Minimum delay between requests in seconds
max_delay: Maximum delay between requests. If None, uses min_delay
"""
self.min_delay = min_delay
self.max_delay = max_delay or min_delay
self.last_request_time = 0
def wait(self):
"""
Wait for the appropriate amount of time before the next request.
Adds random jitter to avoid pattern detection.
"""
elapsed = time.time() - self.last_request_time
delay = random.uniform(self.min_delay, self.max_delay)
if elapsed < delay:
time.sleep(delay - elapsed)
self.last_request_time = time.time()
def __enter__(self):
"""Context manager entry."""
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""Context manager exit."""
self.wait()