如何可靠检测NumPy数组是否通过mmap共享内存?
NumPy数组内存共享检测的盲区:mmap场景失效
之前有一个关于「如何检测NumPy数组是否共享同一数据」的问题,但现有所有方案都无法检测通过mmap内存映射实现的数组内存共享。
复现代码示例
import numpy as np x = np.zeros(2) np.save('/dev/shm/x', x) y = np.load('/dev/shm/x.npy', mmap_mode = 'r+') z = np.load('/dev/shm/x.npy', mmap_mode = 'r+') assert y.base is not z.base assert y.base != z.base assert y.__array_interface__['data'][0] != z.__array_interface__['data'][0] assert not np.may_share_memory(y, z) assert not np.shares_memory(y, z) y[0] = 1 assert y[0] == z[0] == 1 # 实际上二者共享内存
问题表现
- 无论是通过数组的
base属性、__array_interface__中的内存地址字段,还是NumPy官方提供的np.may_share_memory()、np.shares_memory()方法,都判定数组y和z不共享内存 - 但实际修改y的元素后,z的对应元素同步发生变化,证明二者确实共享底层的mmap内存
内容的提问来源于stack exchange,提问作者YouJiacheng
相关产品推荐
相关产品推荐

