CacheQueue
类源码
cache = CacheQueue[Info, Data](
cache_size: int,
qobj: queue.Queue | Callable[[], queue.Queue] | None = None
)
基于进程共享队列Queue()
的缓存实现。
虽然此处的队列也可以是一个线程队列,但仍然推荐使用multiprocessing.get_context(...).Manager().Queue()
。
CacheQueue
实例是为了跨进程捕获数据设计的。该缓存可以在背景 callback 中访问。
该类型的任何实例,都会在主进程中创建一个守护线程,用来监听队列。
对该缓存的操作是线程安全的。
别名
该类可以通过以下方法取得。
import dash_file_cache as dfc
dfc.CacheQueue
dfc.caches.CacheQueue
dfc.caches.memory.CacheQueue
参数
参数 | 类型 | 必选 | |
---|---|---|---|
cache_size | int | 缓存容量,亦即缓存中可保存项目的最大数目。当缓存字典填满时,检查最久未查询过的关键字,并清出该数据。 | |
qobj | queue.Queue | Callable[[], queue.Queue] | None | 由queue.Queue() 或multiprocessing.get_context(...).Manager().Queue() 提供的队列对象。用来在子进程中、将数据同步给主进程。 若该值为 None ,这表示属性CacheQueue().qobj 将稍后提供。该属性需要在该缓存第一次被实际使用之前配置好。若该值为一个返回队列的函数,这表示该函数将用来提供队列的懒加载。换言之,队列将会在第一次需要实际用到的时候初始化。 |
方法
is_in
flag: bool = cache.is_in(key: str)
检查key
是否注册在了缓存中。
运算符__contains__
委托给了该方法。
危险
请只在主进程中使用该方法。其在子进程中无效。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要验证的关键字。 |
输出
参数 | 类型 | |
---|---|---|
flag | bool | 若取值True ,则表明key 给定的值存在于缓存中。 |
remove
info: Info = cache.remove(key: str)
指定某缓存字典项,将其从缓存中移出为信息。
调用该方法、蕴含了数据结束生命周期的断言。调用后,只有缓存数据的信息仍然可用。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 将要从缓存中移除的数据的关键字。 |
输出
参数 | 类型 | |
---|---|---|
info | Info | 从缓存中所查询到的数据、对应的轻量化信息。 |
dump
cache.dump(key: str, info: Info, data: Data)
向缓存中置入数据。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 新数据的关键字。若该关键字key 已存在于缓存中,则替换原值。 | |
info | Info | 要写入缓存中数据的轻量化信息。 | |
data | Data | 要写入缓存中的数据。 |
load
info, data_loader = cache.load(key: str)
透过某关键字,读取对应的元数据。
危险
请只在主进程中使用该方法。其在子进程中无效。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要更改变数据的关键字。若该关键字key 未找到,抛出FileNotFoundError 。 |
输出
参数 | 类型 | |
---|---|---|
info | Info | 从缓存中所查询到的数据、对应的轻量化信息。 |
data_loader | Callable[[], Data] | 缓存数据的懒加载器。该函数实现了一种延迟加载机制,从而允许大体量数据仅在需要使用的时候才实际加载。 |
load_info
info: Info = cache.load_info(key: str)
透过某关键字,读取对应的元数据。
该方法的实现,基于获取load(key)[0]
返回的值。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要查询数据的关键字。若该关键字key 未找到,抛出FileNotFoundError 。 |
输出
参数 | 类型 | |
---|---|---|
info | Info | 从缓存中所查询到的数据。由于data 可能体量较大,该值在大多数情况下,应当定义为一个类文件对象。 |
load_data
data: Data = cache.load_data(key: str)
透过某关键字,加载对应的缓存数据。
该方法的实现,基于获取load(key)[1]()
调用的结果。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要查询数据的关键字。若该关键字key 未找到,抛出FileNotFoundError 。 |
输出
参数 | 类型 | |
---|---|---|
data | Data | 从缓存中所查询到的数据。由于data 可能体量较大,该值在大多数情况下,应当定义为一个类文件对象。 |
属性
qobj
qobj: queue.Queue = cache.qobj
new_qobj: queue.Queue | None
cache.qobj = new_qobj
用来跨进程共享数据的队列对象。
将该值社区为None
也不会触发失败。
mirror
cache_mirror: CacheQueueMirror[Info, Data] = cache.mirror
队列镜像。该值的类型是CacheQueueMirror
。在子进程中,需要使用
dump()
的场景下,使用该值。
cache
cache_dict: LRUDict[str, Tuple[Info, Data]] = cache.cache
获取该实例底层的低层级 LRU 缓存对象。该值的类型是LRUDict
。
危险
请只在主进程中使用该属性。其在子进程中无效。
运算符
__contains__
flag: bool = key in cache
检查key
是否注册在了缓存中。
危险
请只在主进程中使用该方法。其在子进程中无效。
输入
参数 | 类型 | 必选 | |
---|---|---|---|
key | str | 要验证的关键字。 |
输出
参数 | 类型 | |
---|---|---|
flag | bool | 若取值True ,则表明key 给定的值存在于缓存中。 |
范例
参见