import time class TokenBucket: def __init__(self, rate, capacity): self.rate, self.capacity = rate, capacity self.tokens, self.stamp = capacity, time.monotonic() def take(self): now = time.monotonic() self.tokens = min(self.capacity, self.tokens + (now - self.stamp) * self.rate) self.stamp = now if self.tokens >= 1: self.tokens -= 1 return True return False