在python中复制缓冲区时优化内存使用量

时间:2012-02-25 10:03:34

标签: python optimization

我必须复制并对文件进行一些简单的处理。我无法将整个文件读入内存,因为它很大。我想出了一段看起来像这样的代码:

buffer = inFile.read(buffer_size)
while len(buffer) > 0:
    outFile.write(buffer)
    simpleCalculations(buffer)
    buffer = inFile.read(buffer_size)

simpleCalculations过程在此上下文中无关紧要,但我担心缓冲区列表的后续内存分配。在某些硬件配置上,内存使用量非常高,显然会导致计算机死机。我想重用缓冲区。这在python 2.6中是可行的吗?

2 个答案:

答案 0 :(得分:2)

我认为没有任何简单的方法可以解决这个问题。 file.read()方法每次调用时都会返回一个新字符串。另一方面,你真的不需要担心内存不足 - 一旦你将buffer分配给新读取的字符串,之前读取的字符串就不再有任何对它的引用,所以它内存自动释放(有关详细信息,请参阅here)。

答案 1 :(得分:2)

Python是一个严格的引用计数环境,只要您不再引用它,就会释放缓冲区。

如果你担心物理RAM但有备用地址空间,你可以mmap你的文件而不是一次读取它。