CacheFile
类源码
cache = CacheFile(
cache_dir: str | os.PathLike | TempDir | None,
chunk_size: int = 1,
)
基于临时目录的缓存实现。
不同于形如CachePlain
和CacheQueue
的、基于内存的缓存,该缓存CacheFile
纯粹是通过文件I/O实现的。故此,该缓存无法自动删除过期的文件。用户需要自行处理对这些临时文件的维护。
不过,当程序的退出事件被atexit
捕获到时,整个临时文件夹都会被删除。
别名
该类可以通过以下方法取得。
import dash_file_cache as dfc
dfc.CacheFile
dfc.caches.CacheFile
dfc.caches.memory.CacheFile
参数
参数 | 类型 | 必选 | |
---|---|---|---|
cache_dir | str | os.PathLike | TempDir | None | 该缓存使用的临时目录的路径。 若该值的类型为 str 或PathLike ,则cache_dir 直接作为临时目录的路径。这表明该目录由CacheFile 维护,路径则会被转化为TempDir 。若该值的类型为 TempDir ,这表明该缓存正在与其他缓存共享临时目录。若该值为 None ,则会透过tempfile.mkdtemp 创建一个临时目录,且CacheFile 会为该目录创建TempDir ,由TempDir 维护该临时目录。 | |
chunk_size | int | 保存大体量文件时,所用的文件块尺寸。数值单位为MB 。 |
方法
key_to_path
path: str = cache.key_to_path(key: str)
给定文件在缓存中的关键字,返回不带扩展名的文件路径。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 缓存字典项的关键字。 |
输出
参数 | 类型 | |
---|---|---|
path | str | key 查询所得的、缓存字典项对应的基本路径。 |
is_in
flag: bool = cache.is_in(key: str)
检查key
是否注册在了缓存中。
运算符__contains__
委托给了该方法。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要验证的关键字。 |
输出
参数 | 类型 | |
---|---|---|
flag | bool | 若取值True ,则表明key 给定的值存在于缓存中。 |
remove
info: CachedFileInfo = cache.remove(key: str)
指定某缓存字典项,将其从缓存中移出为信息。
调用该方法、蕴含了数据结束生命周期的断言。调用后,只有缓存数据的信息仍然可用。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 将要从缓存中移除的数据的关键字。 |
输出
参数 | 类型 | |
---|---|---|
info | CachedFileInfo | 从缓存中所查询到的数据、对应的轻量化信息。 |
dump
cache.dump(key: str, info: CachedFileInfo, data: CachedData)
向缓存中置入数据。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 新数据的关键字。若该关键字key 已存在于缓存中,则替换原值。 | |
info | CachedFileInfo | 要写入缓存中数据的轻量化信息。 | |
data | CachedData | 要写入缓存中的数据。 |
load
info, data_loader = cache.load(key: str)
透过某关键字,读取对应的元数据。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要更 改变数据的关键字。若该关键字key 未找到,抛出FileNotFoundError 。 |
输出
参数 | 类型 | |
---|---|---|
info | CachedFileInfo | 从缓存中所查询到的数据、对应的轻量化信息。 |
data_loader | Callable[[], CachedData] | 缓存数据的懒加载器。该函数实现了一种延迟加载机制,从而允许大体量数据仅在需要使用的时候才实际加载。 |
load_info
info: CachedFileInfo = cache.load_info(key: str)
透过某关键字,读取对应的元数据。
该方法的实现,基于获取load(key)[0]
返回的值。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要查询数据的关键字。若该关键字key 未找到,抛出FileNotFoundError 。 |
输出
参数 | 类型 | |
---|---|---|
info | CachedFileInfo | 从缓存中查询到的、轻量的元数据。 |
load_data
data: CachedData = cache.load_data(key: str)
透过某关键字,加载对应的缓存数据。
该方法的实现,基于获取load(key)[1]()
调用的结果。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要查询数据的关键字。若该关键字key 未找到,抛出FileNotFoundError 。 |
输出
参数 | 类型 | |
---|---|---|
data | CachedData | 从缓存中所查询到的数据。由于data 可能体量较大,该值在大多数情况下,应当定义为一个类文件对象。 |
属性
chunk_size
chunk_size: int = cache.chunk_size
new_chunk_size: int
cache.chunk_size = new_chunk_size
保存大体量文件时,所用的文件块尺寸。数值单位为MB
。
dir
cache_dir: TempDir = cache.dir
获取该缓存的临时目录(参见TempDir
)。将该值导出到其他CacheFile
的实例,将会使得该目录被共享。
运算符
__contains__
flag: bool = key in cache
检查key
是否注册在了缓存中。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要验证的关键字。 |
输出
参数 | 类型 | |
---|---|---|
flag | bool | 若取值True ,则表明key 给定的值存在于缓存中。 |
范例
参见