Skip to content

Instantly share code, notes, and snippets.

@jney
Forked from callhub/distributed_rate_limiting.py
Last active August 29, 2015 13:56
Show Gist options
  • Save jney/8860114 to your computer and use it in GitHub Desktop.
Save jney/8860114 to your computer and use it in GitHub Desktop.
script = """
local callcount = tonumber(ARGV[1]) or 0
local maxcps = tonumber(ARGV[2]) or 0
local expected = (tonumber(redis.call('GET', KEYS[1])) or 0) + callcount
if expected > maxcps then
return nil
else
redis.call('incrby', KEYS[1], callcount)
redis.call('expire', KEYS[1], 10)
return 1
end
"""
is_rate_okay = redisClient.register_script(script)
@task(max_retries=None)
def plivo_call():
...
...
call_count = len(ph_list)
cur_time = timezone.now()
rate_key = "%s:%s" % (plivo_sub.name, cur_time.strftime("%D %H:%M:%S"))
ret = is_rate_okay(keys=[rate_key],
args=[call_count, max_cps])
if ret is None:
plivo_call.retry(countdown=randint(60,120))
return False
...
p = plivo.RestAPI(auth_id,auth_token)
r = p.make_call(params)
...
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment