永久缓存。
项目描述
Permacache
为特定函数添加永久磁盘缓存。
简单用法
from permacache import permacache
@permacache("unique/path/for/this/function")
def f(x):
out = x ** 2 # do some fancy compute here
return out
您只需像上面那样使用permacache注解来注释您的函数
压缩参数
默认情况下,permacache使用您的函数参数的完整json字符串化,对numpy、torch和attr类给出了一些特殊处理。如果您想使用其他类或只使用参数的一部分作为键,您可以传递一个key_function,如下所示
from permacache import permacache, stable_hash
@permacache(
"path",
key_function=dict(large_argument=stable_hash, not_json_argument=lambda x: str(x), transient_flag=None)
)
def f(large_argument, not_json_argument, transient_flag):
...
字典具有与每个参数对应的键,值在放入键之前应用于它们。在这里,stable_hash
可以用来对值的json字符串化进行哈希,从而节省磁盘空间,但如果你以后想要恢复值,这将变得不可能。此外,str
可以用来将具有稳定的str
表示但无法在json中表示的对象进行字符串化。最后,标志参数在JSON表示中会被忽略,这在用于不影响输出的详细程度标志等时很有用。
非常重要提示:如果您使用stable_hash
,它只保证在同一主要版本的numpy
(numpy 1.*.*
与 2.*.*
)和相同的操作系统下是稳定的。在Ubuntu上,它似乎在numpy的各个版本之间是稳定的,但在Mac OS上则不是。
别名
Permacache使用底层函数签名来构建键。例如,对于以下函数
@permacache("path/f")
def f(x, y=2, z=3):
pass
调用 f(2)
、f(2, 2, 3)
、f(2, z=3, y=2)
和 f(x=2, y=2, z=3)
都使用相同的键进行缓存。
如果您想添加额外的参数,可以使用以下代码保持向后兼容性。
from permacache import drop_if_equal
@permacache("path/f", key_function=dict(t=drop_if_equal(0)))
def f(x, y=2, z=3, t=0):
pass
在上面的代码中,如果t == 0
,则会将t
从考虑范围内去除,使我们能够重用旧的调用。
输出文件
您可以指定一个或多个输入参数作为函数的“输出文件”。这些是函数创建并写入的文件。如果函数调用时除了这些路径外其他参数相同,只要历史上由该函数写入的一些路径仍然存在,函数将不会重新计算。这对于输出是写入文件而不是返回值的函数很有用。该函数也可以有返回值,通常会被缓存。
您有责任确保输出参数除了写入之外不在函数体内使用。
此功能在Windows上不受支持。
@permacache("path/f", out_file=["loc"])
def f(x, loc):
with open(loc, "w") as f:
f.write(str(x) * 10000)
return [x]
项目详情
permacache-3.7.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cfa783f3b00bd27f9cb904a1aa9583e4ec438ee354a5175b7d9ceb5eb4e1590b |
|
MD5 | 5fb950bc9c046b7254a1d7b1c7a2b87c |
|
BLAKE2b-256 | f7dfd31cbcedb9fa83367ac930a19396b43c373269a6179ff4d60991591a1c44 |