我正在重构一个可怕的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()
这只是一种基本上尽可能快地写入文件的简单方法。 我真的不希望在这方面遇到任何实际问题,但我确实希望得到通知,缓存一个大写是否有利?
答案 0 :(得分:2)
来自open
功能的文档:
打开(文件,模式=' r',缓冲= -1,编码=无,错误=无,换行=无,关闭fd =真,开启者=无) - >文件对象
...
buffering是一个可选的整数,用于设置缓冲策略。 传递0切换缓冲关闭(仅允许在二进制模式下),1选择 行缓冲(仅在文本模式下可用)和整数> 1表示 固定大小的块缓冲区的大小。没有缓冲参数时 给定,默认缓冲策略的工作方式如下:
二进制文件以固定大小的块缓冲;缓冲区的大小 使用启发式试图确定底层设备来选择 "块大小"然后回到
io.DEFAULT_BUFFER_SIZE
。 在许多系统上,缓冲区的长度通常为4096或8192字节。"互动"文本文件(isatty()返回True的文件) 使用线缓冲。其他文本文件使用上述策略 对于二进制文件。
换句话说,在大多数情况下,频繁调用write()
时遇到的唯一开销是函数调用的开销。