假装优雅地实现定时缓存装饰器
参考资料 Python 工匠:使用装饰器的技巧 一日一技:实现有过期时间的LRU缓存 这次的参考资料写在前面,因为写得真不错!开始阅读本篇分享前,建议先阅读参考资料,如果还不能实现定时缓存装饰器,再继续从这里开始读。 实现思路 功能拆分: 缓存上次函数运行的结果一段时间。 把它封装成装饰器。 定时缓存 众所周知,python的 functools 库中有 lru_cache 用于构建缓存,而函数参数就是缓存的 key ,因此,只要把缓存空间设置为 1 ,用时间值作为 key ,即可实现定时执行函数。细节就去看参考资料2吧,我这里就不赘述了。 具体实现如下: """ 定时执行delay_cache """ import time from functools import lru_cache def test_func(): print('running test_func') return time.time() @lru_cache(maxsize=1) def delay_cache(_): return test_func() if __name__ == "__main__": for _ in range(10): print(delay_cache(time.time()//1)) # 1s time.sleep(0.2) 程序输出: running test_func