清除numpy.memmap

0 投票
1 回答
632 浏览
提问于 2025-04-16 17:45

假设你有一个用 numpy.memmap 创建的对象,这个对象是以 mode='r' 的方式打开的,也就是只读模式。你有没有办法强制它把所有加载到物理内存中的数据清除掉,但又不删除这个对象本身呢?

换句话说,我希望能保持对这个 memmap 实例的引用有效,但同时把所有用来缓存硬盘数据的物理内存释放掉。对 memmap 数组的任何视图也必须保持有效。

我希望能把这个当作一个诊断工具,帮助我区分脚本的“真实”内存需求和使用 memmap 造成的“临时”内存需求。

我在 RedHat 上使用的是 Python 2.7。

1 个回答

2

如果你运行 "pmap SCRIPT-PID" 这个命令,你会看到“真实”的内存显示为 "[ anon ]" 这样的块,而所有映射的文件在最后一列会显示文件名。

在C语言层面上,你可以清除这些页面,如果你能找到映射开始的指针,然后对它调用 madvise(ptr, length, MADV_DONTNEED),但是这个过程会比较麻烦。

撰写回答