24

IDLEは私のお気に入りのPythonエディターです。ユニットテストとデバッグに非常に役立つ非常に素晴らしく直感的なPythonシェルと、きちんとしたデバッガーを提供します。

ただし、IDLEで実行されるコードはめちゃくちゃ遅いです。めちゃくちゃ私は3桁遅いことを意味します:

bash

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

0.052秒かかります。

アイドル

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

取る:

>>> 0:01:44.853951

これは約2,000倍遅いです。

これを改善するための考えやアイデアはありますか?バックグラウンドのデバッガーと関係があると思いますが、よくわかりません。

アダム

4

2 に答える 2

31

問題は、デバッガではなくテキスト出力です。

Q6600(3GHzオーバークロック)システムで試してみましたが、数値がさらに悪化しています。しかし、出力テキストが追加されるほど、それらが下がっていることを簡単に確認できます。

で実行してみました

1000回の反復=>7.8秒2000回の反復=>28.5秒3000回の反復=>70秒

私は過去にいくつかの低レベルのTKを実行しましたが、TkTextウィジェットがテキストをBTree構造に保持していることを知っています。一度に1文字ずつテキストを追加することは、最悪の方法の1つですが、これはIDLEが行っていることのようです。通常の方法は、より多くのデータをキャッチし、より大きなテキストのチャンクを追加することです。

驚くべきことに、print'x \ n'と書くと、出力がはるかに速くなります。7秒で3000回の反復、19秒で10000回の反復。

したがって、問題は間違いなく既存の行に単一の文字を追加することです。IDLEプログラマーは、TkTextがどのように機能するかを知りませんでした。

したがって、テキストに改行を追加するか、単一の「x」文字だけでなく、より大きなチャンクを出力することをお勧めします。

于 2010-02-06T10:33:07.653 に答える
10

問題はTkinterテキストウィジェットと非常に長い行の非効率的な管理にあり、あなたはそれを作成します。非常に長い行のどの部分も表示されますが、すべてのスクロールが非常に遅いことに気付くでしょう。

于 2010-02-06T13:59:13.227 に答える