This commit is contained in:
2024-07-01 06:01:50 +03:00
parent a6f7a9d65f
commit 386ee7e460
29 changed files with 727 additions and 296 deletions

29
limiter/batch_limiter.py Normal file
View File

@@ -0,0 +1,29 @@
import asyncio
from datetime import datetime
class BatchLimiter:
def __init__(self, max_requests, period):
self.max_requests = max_requests
self.period = period
self.current_requests = 0
self.start_time = None
self.lock = asyncio.Lock()
async def acquire(self):
async with self.lock:
if self.current_requests == 0:
self.start_time = datetime.now()
if self.current_requests < self.max_requests:
self.current_requests += 1
return
elapsed_time = (datetime.now() - self.start_time).total_seconds()
if elapsed_time < self.period:
await asyncio.sleep(self.period - elapsed_time)
self.current_requests = 1
self.start_time = datetime.now()
else:
self.current_requests = 1
self.start_time = datetime.now()