理解Python 2.7中的io.open()方法的缓冲参数

时间:2015-08-07 03:30:47

标签: python io buffer

我试图理解Python 2.7中io.open()方法的缓冲参数。

我在Python解释器中执行:

import utils
buffer_size = 4000
file = open('test.txt','w', buffer_size)
file.write('\n'.join(map(str, range(10000))))  

然后我查看test.txt文件以查看写入了多少行,即使我还没有调用file.close(),也没有自己动手file.flush()

如果buffer_size = 4000,我看到写了9822行。但是,buffer_size = 8192,我看到写了8414行。

我在Windows 7 SP1 x64 Ultimate(Python 2.7.10 x64)和Kubuntu 14.10 Plasma 4(Python 2.7.10 x64)中都有这种行为。我不明白这些数字(9822和8414)的来源。

1 个答案:

答案 0 :(得分:1)

来自documentation的引用(强调是我的):

  

可选的buffering参数指定文件所需的缓冲区   size:0表示无缓冲,1表示行缓冲,任何其他正面   值表示使用(大约)该大小(以字节为单位)的缓冲区。一个   负缓冲意味着使用系统默认值,这通常是   为tty设备缓冲的行,并为其他文件完全缓冲。如果   省略,使用系统默认值。 [2]

即:缓冲区大小不能保证作为参数传递。无法预测正在使用多少缓冲区以及已写入磁盘的数量,因为在这两种情况下写入溢出缓冲区并且缓冲区大小取决于机器。

由于你没有调用显式刷新,部分缓冲区已被刷新,另一部分仍在等待它填充,然后才刷新到磁盘。