22 lines
621 B
Python
22 lines
621 B
Python
import asyncio
|
|
import time
|
|
|
|
|
|
class RateLimiter:
|
|
def __init__(self, max_per_second: float = 2):
|
|
self.max_per_second = max_per_second
|
|
self.min_interval = 1.0 / max_per_second
|
|
self.last_request = 0
|
|
self._lock = asyncio.Lock()
|
|
|
|
async def acquire(self):
|
|
async with self._lock:
|
|
current = time.time()
|
|
time_since_last = current - self.last_request
|
|
|
|
if time_since_last < self.min_interval:
|
|
wait_time = self.min_interval - time_since_last
|
|
await asyncio.sleep(wait_time)
|
|
|
|
self.last_request = time.time()
|