经常使用少量添加对文件对象调用write()是不是很糟糕?

时间:2015-06-06 23:04:50

标签: python performance file file-io stress-testing

我正在重构一个可怕的python脚本,它是生成lua绑定的polycode项目的一部分。

我正在考虑在块中生成lua线,因为它们是生成的。

但我的通用形式的问题是,很快写入文件会有什么不利/警告?

以例如:

persistent_file = open('/tmp/demo.txt')

for i in range(1000000):
    persistent_file.write(str(i)*80 + '\n')


for i in range(2000):
    persistent_file.write(str(i)*20 + '\n')


for i in range(1000000):
    persistent_file.write(str(i)*100 + '\n')


persistent_file.close()

这只是一种基本上尽可能快地写入文件的简单方法。 我真的不希望在这方面遇到任何实际问题,但我确实希望得到通知,缓存一个大写是否有利?

1 个答案:

答案 0 :(得分:2)

来自open功能的文档:

  

打开(文件,模式=' r',缓冲= -1,编码=无,错误=无,换行=无,关闭fd =真,开启者=无) - >文件对象

     

...

     

buffering是一个可选的整数,用于设置缓冲策略。   传递0切换缓冲关闭(仅允许在二进制模式下),1选择   行缓冲(仅在文本模式下可用)和整数> 1表示   固定大小的块缓冲区的大小。没有缓冲参数时   给定,默认缓冲策略的工作方式如下:

     
      
  • 二进制文件以固定大小的块缓冲;缓冲区的大小   使用启发式试图确定底层设备来选择   "块大小"然后回到io.DEFAULT_BUFFER_SIZE。   在许多系统上,缓冲区的长度通常为4096或8192字节。

  •   
  • "互动"文本文件(isatty()返回True的文件)   使用线缓冲。其他文本文件使用上述策略   对于二进制文件。

  •   

换句话说,在大多数情况下,频繁调用write()时遇到的唯一开销是函数调用的开销。