ratelimit.py 637 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/env python3
  2. class rateLimit: # rate limit like iptables limit (per minutes)
  3. tLast = None
  4. def __init__(self, _rate_limit, _rate_burst):
  5. self.rate_limit = _rate_limit
  6. self.rate_burst = _rate_burst
  7. self.bucket = _rate_burst
  8. def limit(self):
  9. tNow = time.time()
  10. if self.tLast is None:
  11. self.tLast = tNow
  12. return True
  13. tDiff = tNow - self.tLast
  14. self.tLast = tNow
  15. self.bucket+= (tDiff / (60 / self.rate_limit))
  16. if self.bucket > self.rate_burst:
  17. self.bucket = self.rate_burst
  18. if self.bucket >= 1:
  19. self.bucket-= 1
  20. return True
  21. else:
  22. return False