Подтвердить что ты не робот

Python: Почему IDLE так медленно?

IDLE - мой любимый редактор Python. Он предлагает очень приятную и интуитивно понятную оболочку Python, которая чрезвычайно полезна для модульного тестирования и отладки и аккуратного отладчика.

Однако код, выполняемый в 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 раз медленнее.

Любые мысли или идеи, как улучшить это? Я предполагаю, что это имеет какое-то отношение к отладчику в фоновом режиме, но я не уверен.

Адам

4b9b3361

Ответ 1

Проблема заключается в том, что текстовый вывод не является отладчиком.

Я просто попробовал это на своей Q6600 (разогнанной 3GHz) системе, и мои цифры еще хуже. Но его легко увидеть, что они идут вниз, более выходной текст добавлен.

Я попытался запустить его с помощью

1000 итераций = > 7,8 с 2000 итераций = > 28,5 сек 3000 итераций = > 70 секунд

В прошлом я использовал некоторые низкоуровневые TK-материалы, и я знаю, что TkText Widget сохраняет текст в структуре BTree. Добавление текста персонажа - это один из худших способов сделать, но это похоже на то, что делает IDLE. Обычным способом является улавливание большего количества данных и добавление большего фрагмента текста.

Удивительно, если вы печатаете "x\n", вывод выполняется намного быстрее. 3000 итераций за 7 секунд и 10000 за 19 сек.

Таким образом, проблема, безусловно, связана с добавлением отдельных символов в существующие строки. Программист IDLE не знал, как работает TkText.

Итак, советую добавить в текст новые символы перевода или вывести более крупные фрагменты, а не только один символ "x".

Ответ 2

Проблема заключается в виджетах Tkinter Text и его неэффективном управлении очень длинными строками, и вы его создаете. Вы заметите, что, хотя любая часть очень длинной строки видна, все прокрутки дьявольски медленны.