python 限制单位时间内函数执行次数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 限制单位时间内函数执行次数相关的知识,希望对你有一定的参考价值。
#https://gist.github.com/gregburek/1441055
#限制单位时间内函数执行次数
import time
from collections import deque
def RateLimited(minutes=1, limitNum=3):
status = deque([0] * limitNum, maxlen=limitNum)
def decorate(func):
def wrap(*args, **kwargs):
current = time.clock()
elapsed = current - status[0]
leftToWait = minutes * 60 - elapsed
if leftToWait > 0 and status[0] != 0:
time.sleep(abs(leftToWait))
ret = func(*args, **kwargs)
status.append(time.clock())
return ret
return wrap
return decorate
def redis_limit(sec=1, limit_num=30):
rd = redis.Redis(db=1, decode_responses=True)
name = "redis_limit"
rd.delete(name)
def decorate(func):
def wrap(*args, **kwargs):
current = time.time()
first_status = int(float(rd.lindex(name, -1) or 0))
elapsed = current - first_status
wait = sec - elapsed
if wait > 0 and rd.llen(name) >= limit_num:
time.sleep(abs(wait))
ret = func(*args, **kwargs)
rd.lpush(name, current)
rd.ltrim(name, start=0, end=limit_num - 1)
return ret
return wrap
return decorate
@RateLimited()
def dd(i):
time.sleep(3)
print i
for i in range(200):
dd(i)
以上是关于python 限制单位时间内函数执行次数的主要内容,如果未能解决你的问题,请参考以下文章
网站访问限制
Python中的嵌套循环
DRF之限制单位时间访问次数
如何将python烧瓶函数的执行限制为单个实例
java定时器 限制方法调用次数
Redis限制在规定时间范围内登陆错误次数限制