多Python脚本共享大内存数据集:通过内存地址直接访问可行吗?
问题解答
你提出的通过传递内存地址跨进程访问数据的方案完全不可行。因为操作系统的进程隔离机制会给每个进程分配独立的虚拟内存空间,一个进程里的内存地址对另一个进程来说毫无意义——要么指向无效内存区域直接触发程序崩溃,要么读取到完全错误的数据。
给你几个实际可行的替代方案:
- 用Python内置的
multiprocessing.shared_memory模块:主进程把15GB数据集加载到共享内存块中,其他脚本通过共享内存的唯一名称挂载这块内存,直接读取数据,全程不需要序列化/反序列化,性能拉满。 - 使用内存映射文件(
mmap模块):先把数据集转成二进制格式存储,主进程和所有脚本都通过mmap将这个文件映射到自身内存空间,相当于共享同一块物理内存,数据只加载一次,所有进程都能直接访问。 - 优化现有socket方案的编解码:放弃传内存地址,改用高效的序列化库(比如
msgpack、pyarrow),或者用pickle的最高协议模式,大幅降低数据编解码的开销,比你想的方案靠谱得多。
内容的提问来源于stack exchange,提问作者Quasi
相关产品推荐
相关产品推荐

