import datetime
import time
import random
class RateLimiter:
def __init__(self, rate=5, period=60):
self.rate = rate # requests per period
self.period = period # period in seconds
self.tokens = rate
self.last_reset = time.time()
def is_allowed(self):
now = time.time()
if now - self.last_reset > self.period:
self.tokens = self.rate
self.last_reset = now
if self.tokens > 0:
self.tokens -= 1
return True
else:
return False
def wait(self):
now = time.time()
if now - self.last_reset < self.period:
time.sleep(self.period - (now - self.last_reset))
self.last_reset = now
def encode_date(date_value, rate_limiter):
"""Encodes a date value with rate limiting."""
if rate_limiter.is_allowed():
# Simulate some processing
time.sleep(random.uniform(0.01, 0.1))
encoded_date = datetime.datetime.now().isoformat() # Example encoding
rate_limiter.tokens -=1
return encoded_date
else:
rate_limiter.wait() # Wait before retrying
return encode_date(date_value, rate_limiter) # Retry the encoding
if __name__ == '__main__':
rate_limiter = RateLimiter(rate=2, period=10) # Allow 2 requests per 10 seconds
date_values = [datetime.datetime.now() for _ in range(10)] #Example date values
for date_value in date_values:
encoded = encode_date(date_value, rate_limiter)
print(f"Encoded date: {encoded}")
Add your comment