使用 PyTables、多处理和共享内存对 HDF5 文件进行高性能并行读取。
项目描述
multitables是一个 Python 库,专为高速访问 HDF5 文件而设计。对 HDF5 的访问由 PyTables 库(表)提供。启动多个进程以并行读取 HDF5,允许并发解压缩。数据通过使用共享内存空间流回调用者,消除了通常的多处理通信开销。
数据由数组的行(最外层维度的元素)组织,这些行的组形成块。使用Streamer接口,由于库的并发特性,无法保证返回给用户的行和/或块的顺序。当它们可用时,它们会被退回。可以使用ordered选项强制磁盘排序,这可能会导致性能损失。
Reader接口允许随机访问,这可以对请求的顺序进行细粒度控制。
从 SSD 读取时可以实现至少 2 倍的性能提升。
新版本 2
现在可以通过异步请求进行随机访问读取。这些请求的结果被放置在共享内存中。有关新界面的示例,请参阅操作方法和单元测试。
执照
该软件在 MIT 许可下分发。有关详细信息,请参阅LICENSE.txt文件。
安装
pip install multitables
multitables依赖于表(pytables 包)、numpy、msgpack和wrapt。该软件包与最新版本的 Python 3 兼容,因为 pytables 不再支持 Python 2。
快速入门:流式传输
import multitables
stream = multitables.Streamer(filename='/path/to/h5/file')
for row in stream.get_generator(path='/internal/h5/path'):
do_something(row)
快速入门:随机访问
import multitables
reader = multitables.Reader(filename='/path/to/h5/file')
dataset = reader.get_dataset(path='/internal/h5/path')
stage = dataset.create_stage(10) # Size of the shared
# memory stage in rows
req = dataset['col_A'][30:35] # Create a request as you
# would index normally.
future = reader.request(req, stage) # Schedule the request
with future.get_unsafe() as data:
do_something(data)
data = None # Always set data to None after get_unsafe to
# prevent a dangling reference
# ... or use a safer proxy method
req = dataset.col('col_A')[30:35,...,:100]
future = reader.request(req, stage)
with future.get_proxy() as data:
do_something(data)
# ... or get a copy of the data
req = dataset['col_A'][30:35,np.arange(500) > 45]
future = reader.request(req, stage)
do_something(future.get())
例子
文档
提供在线文档。一个如何给出图书馆的基本概述。基准测试使用各种压缩算法和硬件配置来测试库的速度。
可以使用sphinx从docs文件夹构建离线文档。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
内置分布
multitables-2.0.1-py2.py3-none-any.whl
(34.8 kB
查看哈希)
关
multitables -2.0.1-py2.py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 101b320cf2bac7a742f3288648693ef6c8a41e6ac8c6ba11030b1f5e0bf86878 |
|
| MD5 | 0b941167a2edc5857ffcdbbc733bcf7a |
|
| 布莱克2-256 | 1f753aedbdbe239a3c11c36fae496c51d8f6237938b78c9d0975dabec0a64108 |