Большая разница в производительности, проходящей через 1-1000 в PyCharm и PythonIDLE / Shell - PullRequest
0 голосов
/ 22 декабря 2018

Недавно, когда я возился с Python разными IDE / оболочками, меня больше всего удивили различия в производительности между ними.

Код, который я написал, представляет собой простой цикл for 1-1000.При выполнении PythonIDLE или Windows Powershell для его завершения потребовалось около 16 секунд , тогда как PyCharm почти сразу же завершил его в течение приблизительно 500 мс .

Мне интересно, почему такая огромная разница.

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

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

IDLE написан на Python и использует tkinter, который упаковывает tcl / tk.По умолчанию IDLE запускает ваш код в отдельном процессе, а вывод отправляется через сокет для отображения в окне оболочки IDLE.Таким образом, есть дополнительные накладные расходы для каждого вызова печати.Для меня на компьютере Windows, которому исполнилось несколько лет, печать 1000 строк занимает около 3 секунд или 3 миллисекунды на печать.

Если вы печатаете 1000 строк одним вызовом печати, как при

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

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

Примечание: в 3.6.7 и 3.7.1 одиночные «большие» отпечатки, где «Large 'могут быть настроены пользователем, сжаты до метки, которая может быть развернута на месте или в отдельном окне.

0 голосов
/ 22 декабря 2018

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

На моем ноутбуке ваш код занимает 4,8 миллисекунды при записи в терминал.При записи в файл требуется всего 460 микросекунд.

TL; DR: запускать глупые тесты, получать глупые времена.

...