我总是对用打印语句简单地输出到终端需要多长时间感到惊讶/沮丧。在最近几次痛苦而缓慢的日志记录之后,我决定对其进行研究,并惊讶地发现几乎所有的时间都在等待终端处理结果。
给stdout写信能加快速度吗?
我写了一个脚本('print_timer.py'在这个问题的底部)来比较将100k行写入stdout、文件和将stdout重定向到/dev/null时的时间。以下是计时结果:$ python print_timer.py
this is a test
this is a test
this is a test
-----
timing summary (100k lines each)
-----
print :11.950 s
write to file (+ fsync) : 0.122 s
print with stdout = /dev/null : 0.050 s
哇哦。为了确保python不会在幕后做一些事情,比如识别出我将stdout重新分配给了/dev/null或者其他什么,我在脚本之外进行了重定向。。。$ python print_timer.py > /dev/null
-----
timing summary (100k lines each)
-----
print : 0.053 s
write to file (+fsync) : 0.108 s
print with stdout = /dev/null : 0.045 s
所以这不是一个python技巧,它只是一个终端。我一直知道将输出转储到/dev/null会加快速度,但从未想到它有那么重要!