磁盘上的简单字典
项目描述
一个会写入磁盘的字典。
Chest像字典一样工作,但它可以将内容写入磁盘。这在以下两种情况下很有用
Chest可以容纳比内存更大的数据集
Chest是持久的,因此可以保存并用于以后使用
工作原理
Chest在两个位置存储数据
内存中的字典
在chest拥有的文件系统中一个目录内
当用户向箱子中添加内容时,内存中的字典会逐渐填满。当箱子在内存中存储的数据超过了期望的数量(参见 available_memory= 关键字参数)时,它会将箱子中更大的内容写入磁盘作为 pickle 文件(pickle 的选择是可以配置的)。当用户请求某个值时,箱子会先检查内存中的存储,然后检查磁盘上的存储,并在必要时将值加载到内存中,同时将其他值推送到磁盘。
Chest 是一个简单的项目。它的目的是提供一个简单的接口,以帮助存储和检索 numpy 数组。然而,它的设计和实现对此用例是无关的,因此可以在各种其他情况下使用。
通过最小的工作,Chest 可以扩展为作为多个进程之间的通信点。
已知缺陷
Chest 被设计用来存放一定数量的较大 numpy 数组。它不处理大量的小型键值对用例(尽管可以稍作努力)。特别是 Chest 存在以下不足:
Chest 不是多进程安全的。我们应在 .keys 文件周围建立一个文件锁。
Chest 不支持对磁盘上的变量进行修改。
许可协议
新 BSD 许可协议。请参阅 许可协议
安装
chest 通过 conda 提供。
conda install chest
chest 位于 Python 包索引(PyPI)上。
pip install chest
示例
>>> from chest import Chest
>>> c = Chest()
>>> # Acts like a normal dictionary
>>> c['x'] = [1, 2, 3]
>>> c['x']
[1, 2, 3]
>>> # Data persists to local files
>>> c.flush()
>>> import os
>>> os.listdir(c.path)
['.keys', 'x']
>>> # These files hold pickled results
>>> import pickle
>>> pickle.load(open(c.key_to_filename('x')))
[1, 2, 3]
>>> # Though one normally accesses these files with chest itself
>>> c2 = Chest(path=c.path)
>>> c2.keys()
['x']
>>> c2['x']
[1, 2, 3]
>>> # Chest is configurable, so one can use json, etc. instead of pickle
>>> import json
>>> c = Chest(path='my-chest', dump=json.dump, load=json.load)
>>> c['x'] = [1, 2, 3]
>>> c.flush()
>>> json.load(open(c.key_to_filename('x')))
[1, 2, 3]
依赖关系
Chest 支持 Python 2.6+ 和 Python 3.2+,拥有一个共同的代码库。
它目前依赖于 heapdict 库。
这是一个轻量级的依赖。
项目详情
关闭
chest-0.2.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f2d1030d4720fd4c0cb258c3383d4bab764cfe441bab1366a0d186b0baf4f4d6 |
|
MD5 | 1f5fc22d0caad0fc63e6bd68cc3ca873 |
|
BLAKE2b-256 | 1866b883b9a26cd2f777dd04b7eedc842d31ea1567b7709b049d46eca418501e |