Python 中写一个装饰器实现限制频率访问
1.思路:
首先要在装饰器中确定访问的方法名, 第一次可以访问成功,之后要在规定的时间(变量)之后才可以访问. 初始应该有一个变量为0;访问成功之后把当前的时间赋值给这个变零. 这样再次访问时把当前的时间与变量比较差值即可.
2.代码:
import time def desc_time(s): def wapper(func): name = func.__name__ #给变量name赋值 确定访问的函数 func_identify = {name: 0,'second': s} def inner(*args,**kwargs): use_time = func_identify[name]+func_identify['second'] # 需等待这些时间之后才可以再次访问 now_time = time.time() re_time =use_time - now_time # 这个结果是一个负数 if now_time > use_time: # 如果当前时间大于等待的时间 res = func(*args,**kwargs) func_identify[name]= now_time # 给 func_identify[name] 重新赋值 else: print("请在{}之后访问".format(re_time)) res = " " return res return inner return wapper @desc_time(10) #在这儿参数为设置调用间隔时间 def foo1(*args, **kwargs): print('执行foo1--执行成功!') return 'result' #测试代码 for i in range(50): time.sleep(1) print(foo1())