limiter.py
file-level
1
files
1
commits
0
hotspots
0
🧊 dead
0
💥 blast risk
| 1 | import time |
| 2 | |
| 3 | |
| 4 | class TokenBucket: |
| 5 | def __init__(self, rate, capacity): |
| 6 | self.rate, self.capacity = rate, capacity |
| 7 | self.tokens, self.stamp = capacity, time.monotonic() |
| 8 | |
| 9 | def take(self): |
| 10 | now = time.monotonic() |
| 11 | self.tokens = min(self.capacity, self.tokens + (now - self.stamp) * self.rate) |
| 12 | self.stamp = now |
| 13 | if self.tokens >= 1: |
| 14 | self.tokens -= 1 |
| 15 | return True |
| 16 | return False |