清除numpy.memmap
假设你有一个用 numpy.memmap
创建的对象,这个对象是以 mode='r'
的方式打开的,也就是只读模式。你有没有办法强制它把所有加载到物理内存中的数据清除掉,但又不删除这个对象本身呢?
换句话说,我希望能保持对这个 memmap
实例的引用有效,但同时把所有用来缓存硬盘数据的物理内存释放掉。对 memmap
数组的任何视图也必须保持有效。
我希望能把这个当作一个诊断工具,帮助我区分脚本的“真实”内存需求和使用 memmap
造成的“临时”内存需求。
我在 RedHat 上使用的是 Python 2.7。
1 个回答
2
如果你运行 "pmap SCRIPT-PID" 这个命令,你会看到“真实”的内存显示为 "[ anon ]" 这样的块,而所有映射的文件在最后一列会显示文件名。
在C语言层面上,你可以清除这些页面,如果你能找到映射开始的指针,然后对它调用 madvise(ptr, length, MADV_DONTNEED),但是这个过程会比较麻烦。