Skip to content

Instantly share code, notes, and snippets.

@kodekracker
Forked from gregburek/rateLimitDecorator.py
Created August 25, 2016 14:19
Show Gist options
  • Save kodekracker/a59dbe6e55b40efd589f328cd3ee4bac to your computer and use it in GitHub Desktop.
Save kodekracker/a59dbe6e55b40efd589f328cd3ee4bac to your computer and use it in GitHub Desktop.
Rate limiting function calls with Python Decorators
import time
def RateLimited(maxPerSecond):
minInterval = 1.0 / float(maxPerSecond)
def decorate(func):
lastTimeCalled = [0.0]
def rateLimitedFunction(*args,**kargs):
elapsed = time.clock() - lastTimeCalled[0]
leftToWait = minInterval - elapsed
if leftToWait>0:
time.sleep(leftToWait)
ret = func(*args,**kargs)
lastTimeCalled[0] = time.clock()
return ret
return rateLimitedFunction
return decorate
@RateLimited(2) # 2 per second at most
def PrintNumber(num):
print num
if __name__ == "__main__":
print "This should print 1,2,3... at about 2 per second."
for i in range(1,100):
PrintNumber(i)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment