You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python能否直接将HDF5数据集读取至SharedMemory?

直接将HDF5数据集写入共享内存避免内存翻倍的方法

可以利用h5py的read_direct()方法,直接把HDF5数据集的数据写入到共享内存对应的numpy数组中,完全跳过中间临时数组的创建,从根本上避免内存占用翻倍的问题。

修改后的代码如下:

import h5py
from multiprocessing import shared_memory
import numpy as np

# 打开HDF5文件并获取数据集
dataset = h5py.File(args.input, 'r')['data']

# 创建共享内存
shm = shared_memory.SharedMemory(
    name=memory_label,
    create=True,
    size=dataset.nbytes
)

# 创建关联共享内存的numpy数组(无实际内存拷贝)
shared_tracemap = np.ndarray(
    dataset.shape,
    dtype=dataset.dtype,
    buffer=shm.buf
)

# 直接将HDF5数据写入共享内存数组,无临时数组产生
dataset.read_direct(shared_tracemap)

关键说明

  • read_direct()是h5py专门为直接写入目标数组设计的方法,它会绕过Python层面的临时数组,直接从HDF5文件读取数据到目标缓冲区(这里就是共享内存的buf)
  • 必须保证shared_tracemap的shape和dtype与HDF5数据集完全一致,否则会出现数据错乱或读取失败
  • 后续多进程可以通过共享内存名称memory_label来连接到这块共享内存,无需重复读取HDF5文件

内容的提问来源于stack exchange,提问作者monday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:42:40