经常使用少量添加对文件对象调用write()是不是很糟糕?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经常使用少量添加对文件对象调用write()是不是很糟糕?相关的知识,希望对你有一定的参考价值。
我正在重构一个可怕的python脚本,它是生成lua绑定的polycode项目的一部分。
我正在考虑在块中生成lua线,因为它们是生成的。
但我的通用形式的问题是,很快写入文件有什么不利/警告?
举个例子:
persistent_file = open('/tmp/demo.txt')
for i in range(1000000):
persistent_file.write(str(i)*80 + '
')
for i in range(2000):
persistent_file.write(str(i)*20 + '
')
for i in range(1000000):
persistent_file.write(str(i)*100 + '
')
persistent_file.close()
这只是一种基本上尽可能快地写入文件的简单方法。我真的不希望在这方面遇到任何实际问题,但我确实希望得到通知,缓存一个大写是否有利?
答案
从open
函数的文档:
open(file,mode ='r',buffering = -1,encoding = None,errors = None,newline = None,closefd = True,opener = None) - > file object
...
buffering是一个可选的整数,用于设置缓冲策略。传递0以切换缓冲关闭(仅允许在二进制模式下),1选择行缓冲(仅在文本模式下可用),并且整数> 1以指示固定大小的块缓冲区的大小。如果没有给出缓冲参数,则默认缓冲策略的工作方式如下:
- 二进制文件以固定大小的块缓冲;使用启发式方法选择缓冲区的大小,尝试确定底层设备的“块大小”并回退到
io.DEFAULT_BUFFER_SIZE
。在许多系统上,缓冲区通常为4096或8192字节长。- “交互式”文本文件(isatty()返回True的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。
换句话说,在大多数情况下,频繁调用write()
时遇到的唯一开销是函数调用的开销。
以上是关于经常使用少量添加对文件对象调用write()是不是很糟糕?的主要内容,如果未能解决你的问题,请参考以下文章
《Linux设计与实现》笔记——系统调用工作原理添加系统调用的过程