PyCharm 和 PythonIDLE/Shell 中 1-1000 循环的性能差异很大

Big difference in performance looping through 1-1000 in PyCharm and PythonIDLE/Shell

最近在摆弄Python和不同的IDE/shells时,最让我吃惊的是它们之间的性能差异。

我写的代码是通过 1-1000 的简单 for 循环。当由 PythonIDLE 或 Windows Powershell 执行时,大约需要 16 秒 完成,而 PyCharm 几乎在大约 [=19] 内立即完成=]500 毫秒。

我想知道为什么差异如此之大。

for x in range(0, 1000, 1):
    print(x)

执行循环的时间几乎为零。您看到的时间流逝是由于打印造成的,它与您正在使用的特定 shell 的输出设备相关。例如,它所做的缓冲类型,可能是用于呈现文本的图形例程,等等。没有实际应用可以尽可能快地将循环中的数字打印到人类可读的显示器上,所以也许你可以试试将相同的测试写入文件。我希望时代会更加相似。

在我的笔记本电脑上,如果写入终端,您的代码需要 4.8 毫秒。写入文件仅需460微秒

TL;DR:运行 愚蠢的基准测试,获得愚蠢的时间。

IDLE 是用 Python 编写的,使用了包装 tcl/tk 的 tkinter。默认情况下,IDLE 在单独的进程中运行您的代码,输出通过套接字发送以在 IDLE 的 Shell window 中显示。所以每次打印调用都会有额外的开销。对我来说,在一台使用多年的 Windows 机器上,打印 1000 行大约需要 3 秒,或者每次打印需要 3 毫秒。

如果您用一次打印调用打印 1000 行,就像

print('\n'.join(str(i) for i in range(1000)))

结果可能需要 3 毫秒多一点,但在主观上仍然差不多 'instantaneous'。

注意:在 3.6.7 和 3.7.1 中,单个 'large' 打印,其中 'large' 可以由用户自定义,被压缩成一个标签,可以在 -放置或单独 window.