跳转到主要内容

永久缓存。

项目描述

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 (27.0 kB 查看哈希值)

上传时间

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面