我试图理解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)的来源。
答案 0 :(得分:1)
来自documentation的引用(强调是我的):
可选的buffering参数指定文件所需的缓冲区 size:0表示无缓冲,1表示行缓冲,任何其他正面 值表示使用(大约)该大小(以字节为单位)的缓冲区。一个 负缓冲意味着使用系统默认值,这通常是 为tty设备缓冲的行,并为其他文件完全缓冲。如果 省略,使用系统默认值。 [2]
即:缓冲区大小不能保证作为参数传递。无法预测正在使用多少缓冲区以及已写入磁盘的数量,因为在这两种情况下写入溢出缓冲区并且缓冲区大小取决于机器。
由于你没有调用显式刷新,部分缓冲区已被刷新,另一部分仍在等待它填充,然后才刷新到磁盘。