mmap与fileinput的优点

Boo*_*ean 5 python performance

我读到mmap比fileinput更有优势,因为它会将页面读入内核pagecache并在用户地址空间中共享页面.然而,fileinput实际上将页面带入内核并将一行复制到用户地址空间.因此,fileinput存在额外的空间开销.

所以,我打算转向mmap,但我想从高级python黑客那里知道它是否能提高性能?

如果是这样,是否有类似的fileinput实现使用mmap?

如果您知道,请指出任何开源代码.

谢谢

And*_*one 1

mmap 获取一个文件并将其保存在 RAM 中,以便您可以像字节数组或大数据结构一样对其进行索引。

如果您以“随机访问”方式访问文件,那就要快得多——即执行大量 fseek()、fread()、fwrite() 组合。

但是,如果您只是读入文件并处理每一行一次(比如说),那么它不太可能明显更快。事实上,对于任何合理的文件大小(请记住,使用 mmap 时,所有文件都必须适合 RAM——否则会发生分页,从而开始降低 mmap 的效率),它可能是无法区分的。

  • 这是不正确的。mmap:ed 文件不需要适合 RAM - 它们需要适合进程地址空间。32 位进程的可用地址空间为 2-3 GB,64 位进程的可用地址空间非常大,与计算机中的实际 RAM 量无关。在 64 位 Python 上,mmap 100 GB 文件是完全合理的! (11认同)
  • 我不太清楚你所说的低效率是什么意思。mmap:ing 文件不会从磁盘读取整个文件。仅读取您通过 mmap 返回的对象实际访问的文件部分。 (4认同)