Skip to main content

使用 PyTables、多处理和共享内存对 HDF5 文件进行高性能并行读取。

项目描述

multitables是一个 Python 库,专为高速访问 HDF5 文件而设计。对 HDF5 的访问由 PyTables 库()提供。启动多个进程以并行读取 HDF5,允许并发解压缩。数据通过使用共享内存空间流回调用者,消除了通常的多处理通信开销。

数据由数组的行(最外层维度的元素)组织,这些行的组形成块。使用Streamer接口,由于库的并发特性,无法保证返回给用户的行和/或块的顺序。当它们可用时,它们会被退回。可以使用ordered选项强制磁盘排序,这可能会导致性能损失。

Reader接口允许随机访问,这可以对请求的顺序进行细粒度控制。

从 SSD 读取时可以实现至少 2 倍的性能提升。

新版本 2

现在可以通过异步请求进行随机访问读取。这些请求的结果被放置在共享内存中。有关新界面的示例,请参阅操作方法和单元测试。

执照

该软件在 MIT 许可下分发。有关详细信息,请参阅LICENSE.txt文件。

安装

pip install multitables

multitables依赖于(pytables 包)、numpymsgpackwrapt。该软件包与最新版本的 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 查看哈希

已上传 py2 py3