[英]Can we disable h5py file locking for python file-like object?
使用h5py
打开 HDF5 文件时,您可以传入一个类似 python 文件的对象。 我已经这样做了,其中类似文件的对象是我自己的基于网络的传输层的自定义实现。
这很好用,我可以在高延迟传输层上对大型 HDF5 文件进行切片。 然而,HDF5 似乎提供了它自己的文件锁定功能,因此如果您在同一进程(线程模型)中打开多个只读文件,它仍然只会有效地连续运行操作。
HDF5 中有支持并行操作的驱动程序,例如h5py.File(f, driver='mpio')
,但这似乎不适用于使用h5py.File(f, driver='fileobj')
的类似 python 文件的对象h5py.File(f, driver='fileobj')
。
我看到的唯一解决方案是使用多处理。 但是可扩展性非常有限,由于开销,您实际上只能打开 10 个进程。 我的传输层使用 asyncio 并且能够以 1,000 或 10,000 的规模进行并行操作,这使我能够构建更长的慢速文件读取操作队列,从而提高我的总吞吐量。
当我并行排队 10k IO 操作(需要 50GB 的 RAM 来服务请求,一个可接受的权衡吞吐量)。
有什么办法可以在使用
driver='fileobj'
时禁用 h5py 文件锁定?
您只需要将环境变量HDF5_USE_FILE_LOCKING的值设置为FALSE 。
示例如下:
在 Linux 或 MacOS 中通过终端: export HDF5_USE_FILE_LOCKING=FALSE
在 Windows 中通过命令提示符 (CMD): set HDF5_USE_FILE_LOCKING=FALSE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.