我们可以禁用类似Python文件的对象的H5PY文件锁定吗?



使用h5py打开HDF5文件时,您可以通过Python File样对象传递。我这样做了,其中类似文件的对象是我自己基于网络的传输层的自定义实现。

这很棒,我可以将大型HDF5文件切成高潜伏期传输层。但是,HDF5似乎提供了自己的文件锁定功能,因此,如果您在同一过程中打开多个文件(线程模型(,它仍然只能有效地运行操作。

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

我看到的唯一解决方案是使用多处理。但是,可伸缩性非常有限,您只能因开销而实际打开10个过程。我的运输层使用Asyncio,并且能够按1,000或10,000的尺度进行并行操作,从而使我能够建立更长的慢速文件阅读操作的队列,从而增强我的总吞吐量。

我可以在我并行排队10K io ops(需要50GB的RAM来维修请求,可接受的一个可接受的RAM时,可以使用我的传输层与本地S3接口进行1.5 GB/sec/sec的二进制读数。吞吐量的权衡(。

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

您只需要将值设置为 false 对于环境变量 HDF5_USE_FILE_LOCKING

示例如下:

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

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

最新更新