python - 我们可以为 python 类文件对象禁用 h5py 文件锁定吗?

标签 python python-3.6 hdf5 h5py

当使用 h5py 打开 HDF5 文件时,您可以传入一个类似 python 文件的对象。我已经这样做了,其中类文件对象是我自己的基于网络的传输层的自定义实现。

效果很好,我可以在高延迟传输层上分割大型 HDF5 文件。然而,HDF5 似乎提供了自己的文件锁定功能,因此如果您在同一进程(线程模型)中以只读方式打开多个文件,它仍然只会有效地连续运行操作。

HDF5 中有支持并行操作的驱动程序,例如 h5py.File(f, driver='mpio'),但这似乎不适用于 python 类文件对象使用 h5py.File(f, driver='fileobj')

我看到的唯一解决方案是使用多处理。然而,可扩展性非常有限,由于开销,您实际上只能打开 10 个进程。我的传输层使用 asyncio 并且能够在 1,000 或 10,000 的规模上进行并行操作,这使我能够构建一个更长的慢速文件读取操作队列,从而提高我的总吞吐量。

当我并行排队 10k IO 操作(需要 50GB 的 RAM 来处理请求,可接受吞吐量的权衡)。

Is there any way I can disable the h5py file locking when using driver='fileobj'?

最佳答案

您只需将环境变量 HDF5_USE_FILE_LOCKING 的值设置为 FALSE

例子如下:

在 Linux 或 MacOS 中通过终端:export HDF5_USE_FILE_LOCKING=FALSE

在 Windows 中通过命令提示符 (CMD):set HDF5_USE_FILE_LOCKING=FALSE

关于python - 我们可以为 python 类文件对象禁用 h5py 文件锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57310333/

相关文章:

python - hdf5 文件到 pandas 数据框

python - h5py 中的组是否保留其成员添加的顺序?

python - 如何在 SQLAlchemy 中使用 JSON 插入多条记录

pythonw 3.6.6 sys.stdout 在重新分配时不执行任何操作

c++ - 如何在 C++ 中拆分 HDF5 复合数据类型

python - Df header : Insert a full year of header rows at end of month and fill non populated months with zero

python - sympylambdaify 添加两个函数

python - 类似于python中的spring sleuth的框架

Python 将字符串输入与现有字典匹配的简单方法

python - 在python上打印出类参数