使用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