Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中缓冲的用途是什么';s内置的open()函数?_Python_Python 2.7 - Fatal编程技术网

python中缓冲的用途是什么';s内置的open()函数?

python中缓冲的用途是什么';s内置的open()函数?,python,python-2.7,Python,Python 2.7,Python文档: 上述文档说明“可选缓冲参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲表示使用系统默认值。如果省略,则使用系统默认值。”。 当我使用 filedata = open(file.txt,"r",0) 或 或 或 或 输出没有变化。上面显示的每一行以相同的速度打印。 输出: 《憨豆先生》是一部15集25集的英国电视连续剧- 由罗宾·德里斯科尔(Robin Driscoll)撰写,罗恩·阿特金森(Ro

Python文档:

上述文档说明“可选缓冲参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲表示使用系统默认值。如果省略,则使用系统默认值。”。
当我使用

filedata = open(file.txt,"r",0)  

输出没有变化。上面显示的每一行以相同的速度打印。
输出:

《憨豆先生》是一部15集25集的英国电视连续剧-

由罗宾·德里斯科尔(Robin Driscoll)撰写,罗恩·阿特金森(Rowan Atkinson)主演的小插曲 作为

标题字符。罗宾也写了不同的剧集

德里斯科尔和理查德·柯蒂斯,还有一个是本·埃尔顿。十三个

1990年1月1日,试点电视台在ITV上播出了几集, 直到

“晚安,憨豆先生”,1995年10月31日。一个剪辑秀,“最佳片段” 的

1995年12月15日播出了《憨豆先生》和一集《头发》 借

《伦敦的憨豆先生》直到2006年才在电视上播出 五分硬币

那么open()函数中的缓冲参数如何有用呢?什么 价值观


最好使用哪个缓冲参数?

启用缓冲意味着您没有直接与操作系统的文件表示或其文件系统API接口。相反,一块数据从原始OS文件流读取到缓冲区中,直到被消耗为止,此时会将更多数据提取到缓冲区中。就您得到的对象而言,您将得到一个
bufferedobase
对象,该对象包装一个底层
RawIOBase
(表示原始文件流)

这有什么好处?与原始流的良好接口可能会有很高的延迟,因为操作系统必须摆弄物理对象(如硬盘),这在所有情况下都是不可接受的。假设你想每隔5毫秒读取一个文件中的三封信,而你的文件是在一个破旧的硬盘上,甚至是一个网络文件系统上。与其每5ms读取一次原始文件流,不如将文件中的大量字节加载到内存中的缓冲区中,然后随意使用


您选择的缓冲区大小取决于您使用数据的方式。对于上面的示例,缓冲区大小为1个字符会很糟糕,3个字符就可以了,任何3个字符的大倍数都不会给用户造成明显的延迟,这将是理想的选择。

您还可以通过从io模块调用只读默认缓冲区大小属性来检查默认缓冲区大小

import io
print (io.DEFAULT_BUFFER_SIZE)

如前所述,缓冲是将文件块存储在临时内存中直到文件完全加载的过程。在python中,可以给出不同的值。如果缓冲设置为0,则缓冲关闭。当我们需要缓冲文件时,缓冲将设置为1。

缓冲设置为-1时,我的文件写入耗时13分钟。缓冲设置为2**10时,我的文件写入耗时7秒。因此,缓冲的目的是加快程序的速度。

我可能错了,但我认为缓冲只有在打开文件进行写入时才有明显的效果,在文件写入时缓冲输入,直到到达换行符或文件关闭为止。这可能会更快一些。当将缓冲区设置为1时,将只显示一行缓冲数据,如果为负数,则缓冲区大小将是系统默认值。你问这个问题是对的,我投了更高的票。手册和教程是为自己编写的人编写的!他们说“如果缓冲值设置为0,则不会发生缓冲。”那么缓冲先生是什么呢?我知道超过15种编程语言,我从来没有听说过这样的缓冲!它是一个缓冲区,意味着它是一个筒仓,直到装满为止,需要排空。您的程序花费的时间更少,因为它进行的系统调用更少。事实上,遗憾的是,在生产环境中,缓冲并没有起到任何作用。还是用了13分钟。我在Psycopg2、OSX和Python3.8文件IO之间遇到了一些奇怪的问题。但是在测试中,缓冲帮助很大!
filedata = open(file.txt,"r",1)  
filedata = open(file.txt,"r",2)
filedata = open(file.txt,"r",-1) 
filedata = open(file.txt,"r")
import io
print (io.DEFAULT_BUFFER_SIZE)