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

理解Python 2.7中io.open()方法的缓冲参数,python,io,buffer,Python,Io,Buffer,我试图理解Python 2.7中方法的缓冲参数 我在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\u size=400

我试图理解Python 2.7中方法的缓冲参数

我在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\u size=4000
,我看到写了9822行。然而,
buffer\u size=8192
,我看到已经写入了8414行

我在Windows7SP1x64Ultimate(Python2.7.10x64)和Kubuntu14.10Plasma4(Python2.7.10x64)中都有这种行为。我不明白这些数字(9822和8414)是从哪里来的。

引用(重点是我的):

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

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


由于您没有调用显式刷新,缓冲区的一部分已被刷新,另一部分在刷新到磁盘之前仍在等待填充。

到目前为止,我还没有找到任何答案。因此,如果有人有任何想法,我仍然感兴趣。引用:“任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。”。即:缓冲区大小不能保证是作为参数传递的值。由于写入溢出,无法预测缓冲区的使用量和写入磁盘的量。在这两种情况下,缓冲区的大小取决于机器。@Tensibai谢谢,很有意思!我想这就回答了我的问题:)欢迎您将其作为答案发布。@Tensibai我认为您可以将您的评论作为答案发布,无需任何修改。我同意可以进一步挖掘,但信息应该足以满足许多人的需求。