Python multiprocessing.shared_memory访问共享数组异常问题求解
问题原因与解决方案
核心诱因
你遇到的是Python 3.8.0 Windows版本的标准库已知Bug,和你编写的代码、官方示例本身没有关系。
该Bug的底层逻辑是:3.8.0版本的multiprocessing.shared_memory在Windows平台实现时,调用系统API创建共享内存段后没有正确完成内存页的提交映射,导致你在第一个进程中写入共享内存的内容仅落在了进程本地的页缓存中,没有真正同步到全局共享内存段。因此其他进程读取到的是未初始化的垃圾值,跨进程的修改也无法互通。
修复方法
- 最稳妥的方案是直接将Python版本升级到3.8.1及以上,该Bug已经在3.8.1的版本更新中被正式修复,升级后直接运行官方示例即可得到预期结果。
- 如果必须停留在3.8.0版本,可以在第一个进程完成数据写入后,先调用
shm.close()再重新打开该共享内存段,临时强制触发内存同步,但该方案稳定性较低,仅可作为临时测试使用。
内容的提问来源于stack exchange,提问作者42bsk
相关产品推荐
相关产品推荐

