НЕАКТИВНЫЙ мой любимый редактор Python. Это предлагает очень хорошую и интуитивную оболочку Python, которая чрезвычайно полезна для поблочного тестирования и отладки и аккуратного отладчика.
Однако код, выполненный под НЕАКТИВНЫМ, является безумно медленным. Безумно я имею в виду 3 медленные порядка величины:
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 раз медленнее.
Какие-либо мысли или идеи, как улучшить это? Я предполагаю, что это имеет некоторое отношение к отладчику в фоновом режиме, но я не действительно уверен.
Adam
Проблема заключается в выводе текста, а не в отладчике.
Я только что попробовал это на своей системе Q6600 (разогнан на 3 ГГц), и мои цифры еще хуже. Но легко видеть, что они снижаются, чем больше добавляется текст вывода.
Я попытался запустить его с
1000 итераций => 7,8 с 2000 итераций => 28,5 с 3000 итераций => 70 с
Я сделал несколько в прошлом материал TK низкого уровня, и я знаю, что виджет TkText сохраняет текст в структуре BTree. Добавление символа к тексту за раз - один из худших способов сделать это, но, похоже, именно это и делает IDLE. Обычный способ - захватить больше данных и добавить больший кусок текста.
Как ни удивительно, если вы напишете print 'x \ n', результат будет намного быстрее. 3000 итераций за 7 секунд и ваши 10000 за 19 секунд.
Итак, проблема определенно заключается в добавлении одиночных символов к существующим строкам. Программист IDLE не знал, как работает TkText.
Поэтому советуем добавлять в текст больше новой строки или выводить большие фрагменты, а не только один символ «x».
Проблема в виджете Tkinter Text и его неэффективном управлении очень длинными строками, и вы создаете его. Вы заметите, что хотя любая часть видна очень длинная строка, вся прокрутка чертовски медленная.