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

如何在SharedMemory与BytesIO之间复制字节数据?

SharedMemory 与 BytesIO 之间的数据复制

1. 从 SharedMemory 复制到 BytesIO

利用SharedMemory的buf内存视图,直接将其转换为bytes后写入BytesIO即可,操作高效直观:

from multiprocessing import shared_memory
import io

# 连接到已存在的共享内存对象(假设名称为"my_shared_mem")
shm = shared_memory.SharedMemory(name="my_shared_mem", create=False)
# 将内存视图转换为bytes并初始化BytesIO
bytes_io = io.BytesIO(bytes(shm.buf))

# 后续可像操作普通文件一样使用bytes_io
bytes_io.seek(0)
processed_data = bytes_io.read()

# 使用完毕关闭共享内存连接
shm.close()

如果只需复制共享内存中的部分数据,可通过内存视图切片实现:

# 仅复制前1024字节
partial_data = bytes(shm.buf[:1024])
bytes_io = io.BytesIO(partial_data)

2. 从 BytesIO 复制到 SharedMemory

需确保共享内存的容量足够容纳BytesIO中的数据,然后将BytesIO的内容写入内存视图:

from multiprocessing import shared_memory
import io

# 初始化并填充BytesIO对象
bytes_io = io.BytesIO(b"待写入共享内存的原始数据")
bytes_io.seek(0)
data_to_write = bytes_io.read()

# 创建或连接到指定大小的共享内存对象
shm = shared_memory.SharedMemory(name="my_shared_mem", create=True, size=len(data_to_write))
# 将数据写入共享内存的内存视图
shm.buf[:len(data_to_write)] = data_to_write

# 使用完毕关闭并释放共享内存(仅创建者需调用unlink)
# shm.close()
# shm.unlink()

注意事项

  • 共享内存的大小必须大于等于待写入的数据长度,否则会抛出ValueError。
  • 多进程并发操作共享内存时,需配合锁(如multiprocessing.Lock)避免读写冲突。
  • 内存视图的切片赋值操作直接操作底层内存,无需额外数据拷贝,性能优于传统文件读写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:22:45