3 回答
TA贡献1735条经验 获得超5个赞
写入物理磁盘比写入“屏幕”(大概是全RAM操作)要快得多,并且实际上与使用/ dev / null转储到垃圾中一样快?
恭喜,您刚刚发现了I / O缓冲的重要性。:-)
磁盘似乎速度更快,因为它具有很高的缓冲能力:write()在将任何内容实际写入物理磁盘之前,所有Python的调用都将返回。(操作系统稍后执行此操作,将成千上万的单个写入合并为一个大而有效的块。)
另一方面,终端几乎不执行缓冲或不执行缓冲:每个人print/ write(line)等待完整的写入(即显示到输出设备)完成。
为了使比较合理,您必须使文件测试使用与终端相同的输出缓冲,可以通过将示例修改为以下操作来做到这一点:
fp = file("out.txt", "w", 1) # line-buffered, like stdout
[...]
for x in range(lineCount):
fp.write(line)
os.fsync(fp.fileno()) # wait for the write to actually complete
我在我的机器上运行了文件写入测试,并通过缓冲在100,000行中也进行了0.05s的测试。
但是,通过上述修改以无缓冲方式写入数据,只需要40秒就可以将1,000行写入磁盘。我放弃了等待100,000行的写操作,但是从以前的内容推论得出,这将花费一个多小时。
这使航站楼的11秒成为现实,不是吗?
因此,要回答您最初的问题,考虑到所有因素,写一个终端实际上非常快,并且没有太多的空间可以使它更快(但是各个终端的工作量有所不同;请参阅Russ对此的评论)回答)。
(您可以像使用磁盘I / O一样添加更多的写缓冲,但是直到缓冲区被刷新后,您才能看到向终端写入的内容。这是一个折衷方案:交互性与大容量效率。)
添加回答
举报