Python:为什么IDLE这么慢?

时间:2010-02-06 09:58:20

标签: python performance python-idle

IDLE是我最喜欢的Python编辑器。它提供了非常好的和直观的Python shell,对于单元测试和调试非常有用,并且是一个整洁的调试器。

但是,在IDLE下执行的代码非常慢。疯狂地我的意思是 3个数量级慢:

的bash

time echo "for i in range(10000): print 'x'," | python

需要0.052秒,

IDLE

import datetime
start=datetime.datetime.now()
for i in range(10000): print 'x',
end=datetime.datetime.now()
print end-start

注意到:

>>> 0:01:44.853951

这大约慢了2000倍。

有任何想法或想法如何改善这一点?我想它在后台与调试器有关,但我不太确定。

亚当

2 个答案:

答案 0 :(得分:30)

问题是文本输出而不是调试器。

我刚刚在我的Q6600(3GHz超频)系统上试过它,我的数字更糟糕。 但很容易看出它们正在减少更多的输出文本。

我尝试用

运行它

1000次迭代=> 7,8秒 2000次迭代=> 28.5秒 3000次迭代=> 70秒

我过去做了一些低级别的TK,我知道TkText Widget将文本保持在BTree结构中。在一段时间内添加文本字符是最糟糕的方法之一,但这似乎是IDLE正在做的事情。通常的方法是捕获更多数据并附加更大的文本块。

令人惊讶的是,如果你写print'x \ n',输出会快得多。在7秒内完成3000次迭代,在19秒内完成10000次迭代。

所以问题肯定在于向现有线附加单个字符。 IDLE程序员不知道TkText是如何工作的。

因此建议在文本中添加更多换行符或输出更大的块,而不仅仅是单个“x”字符。

答案 1 :(得分:9)

问题在于Tkinter Text小部件,以及对非常长的行的低效管理,并且您创建了一个。 你会注意到,虽然很长的一行都是可见的,但所有的滚动都非常慢。