这个Python包专门设计用于缓存函数的返回结果,以便于将结果持久化并保存在本地。它能够基于函数的参数内容和代码变动来判定是否需要读取已有的缓存。
如果有一个函数运行时间很长,但是他的结果在参数不变的情况下,拿到的结果是一样的,那么久可以加一下缓存的注解,简单方便!
GitHub: https://github.com/glwhappen/cache-result
举个例子
add 函数第一次运行需要4秒,后续有缓存以后运行只需要一瞬间。
import time
from cache_result import cache
@cache()
def add(a, b):
time.sleep(4)
return a + b
print("第一次运行需要花费4秒,再次运行只需要瞬间")
print(add(1, 2))
更多用法
注意事项:需要在项目根目录创建一个
.projectroot
文件,用来标识项目的根目录,这样缓存文件都会创建到根目录
分文件缓存
可以通过设置路径,添加不同的文件,并且文件的名称可以使用占位符
缓存的计算斐波那契数列的第n项,可以通过设置占位符,来让不同的结果缓存到不同的文件夹中。
import time
from cache_result import cache
@cache('cache/fib/{n}')
def fib(n):
"""计算斐波那契数列的第n项"""
if n < 2:
return n
else:
return fib(n-1) + fib(n-2)
if __name__ == '__main__':
print("计算斐波那契数列花费时间:")
# 测试函数
start = time.time()
print(fib(40)) # 第一次计算将花费一些时间
print('Time: ', time.time()-start)
print("如果cache中有缓存结果了,再次运行会非常快")
print("删除cache中的内容即可重新执行函数")
按时间缓存
如果需要按照时间让缓存失效,例如一天,一周,或者一小时
添加按时间缓存,允许根据日期和时间来组织缓存文件,从而使得缓存管理更加高效和直观。完整的时间格式,可以自己控制:{time:YYYY-MM-DD_HH-mm-ss}
下面的写法是缓存一个小时
import time
from cache_result import cache
@cache("cache/{time:YYYY-MM-DD_HH}")
def add(a, b):
time.sleep(4)
return a + b
print("第一次运行需要花费4秒,在一个小时内运行,只需要瞬间")
print(add(1, 2))
排除某些参数
如果输入的参数不会影响输出的结果,可以进行排除,这样他的改变不会导致重新计算缓存
import time
from cache_result import cache
@cache("cache/{time:YYYY-MM-DD_HH}", exclude_args=['sleep'])
def add(a, b, sleep=4):
time.sleep(sleep)
return a + b
print("排除了sleep参数的影响,他的改变不会导致重新缓存")
print(add(1, 2))
print(add(1, 2, sleep=2))
高级用法
-
缓存目录的层级是方便用户区分的,缓存文件生成以后可以任意的修改缓存目录的层级,例如原来的缓存目录为 cache/a
可以直接改为cache/b
然后把本地的缓存文件手动从a
复制到b
更多内容可以查看GitHub仓库,有任何问题欢迎留言。如果觉得好用可以给个star
GitHub: https://github.com/glwhappen/cache-result
原文始发于微信公众号(笔记卡片):Python结果缓存,再也不担心重做实验了!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/301661.html