python - 使用 pytables/hdf5 实时分析模拟数据

标签 python c hdf5 pytables

我正在使用 c/CUDA 和 python 进行一些 cfd 模拟,目前工作流程如下:

  1. 开始用纯c/cuda编写的模拟
  2. 将输出写入二进制文件
  3. 使用 python 重新打开文件,即 numpy.fromfile 并进行一些分析。

由于我有大量数据和一些元数据,我认为这会更好 切换到 hdf5 文件格式。所以我的想法是这样的,

  1. 使用 pytables 为我的模拟创建一些初始条件数据。
  2. 使用标准 hdf5 库重新打开并写入 c 中的数据集。
  3. 使用 pytables 重新打开文件进行分析。

我真的很想对数据进行一些实时分析,即 从 c 程序写入 hdf5 并使用 pytables 直接从 python 读取。 这会很有用,但我真的没有 确定 pytables 支持多少。

由于我从未使用过 pytables 或 hdf5,因此很高兴知道 这是一个好方法还是存在一些陷阱。

最佳答案

我认为这是一个合理的做法,但确实存在一个陷阱。 HDF5 C 库不是线程安全的(有一个“并行”版本,稍后会详细介绍)。这意味着,您的方案无法立即使用:一个进程将数据写入文件,而另一个进程正在读取(不一定是相同的数据集)将导致文件损坏。要使其正常工作,您必须:

  1. 实现文件锁定,确保写入文件时没有进程正在读取,或者
  2. 通过将读/写委托(delegate)给特定进程来序列化对文件的访问。然后,您必须通过某种 IPC 技术(Unix 域套接字,...)与该进程进行通信。当然,这可能会影响性能,因为数据会被来回复制。

最近,HDF 小组发布了基于 MPI 的 HDF5 并行版本,使得并发读/写访问成为可能。比照。 http://www.hdfgroup.org/HDF5/PHDF5/ 。它是为像您这样的用例而创建的。

据我所知,pytables 不提供任何与并行 HDF5 的绑定(bind)。您应该使用 h5py相反,它提供了非常用户友好的并行 HDF5 绑定(bind)。请参阅此网站上的示例:http://docs.h5py.org/en/2.3/mpi.html

不幸的是,并行 HDF5 有一个主要缺点:迄今为止,它不支持写入压缩数据集(但可以读取)。比照。 http://www.hdfgroup.org/hdf5-quest.html#p5comp

关于python - 使用 pytables/hdf5 实时分析模拟数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24757713/

相关文章:

c - 对所有核心使用 perfsuite

c - 如何在C中生成一个xml文件

c - 为什么当我推送数据时该程序会发生运行时崩溃?

c++ - 如何获取HDF5文件的数据集信息

python - 使用Python OpenCV在高度图到法线图上的问题

python - 如何增加Python异步循环警告的阈值时间?

python - 给定范围的组合数

python - Windows 版 PyTables 的 HDF5 ImportError

python - 与 HDF5 相比,为什么从 CSV 导入时 pandas 和 dask 的性能更好?

python - 使用列表理解更改嵌套列表中的第一项