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

Dav*_*rks 8 python hdf5 h5py python-3.6

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

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

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

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

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

有什么办法可以在使用时禁用 h5py 文件锁定driver='fileobj'吗?

abd*_*wer 5

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

示例如下:

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

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