Python Время выполнения

Python Время выполнения нужно знать для ускорения программ.

Пламенный привет посетителям этой страницы, пришедшим из социальных сетей, да и всем остальным тоже!

В апреле 2021-го года наблюдал удивительное явление: обильный поток посетителей из 4-х социальных сетей. В связи с этим настоятельно рекомендую всем неоднократно и регулярно посещать сайт rtbsm.ru — там в общих чертах изложена Российская Теннисная Балльная Система Марии (Шараповой).

Приглашаю всех полюбоваться на Фото и Видео красавицы Марии — надеюсь, что Вы поделитесь адресом сайта rtbsm.ru с друзьями и знакомыми.

Главная проблема — известить Марию, чтобы она лично как можно скорее заявила на весь мир о РТБСМ.

Python Время выполнения — это средство измерения времени выполнения небольших фрагментов кода, его имеет смысл применять при оптимизации программы.

Измерение времени выполнения фрагментов кода

Модуль timeit позволяет измерить время выполнения небольших фрагментов кода с целью оптимизации программы. Прежде чем использовать модуль, необходимо подключить его с помощью инструкции:
from timeit import Timer

Измерения производятся с помощью класса Timer. Конструктор класса имеет следующий формат:
Timer( [stmt='pass'] [, setup='pass'] [, timer=<timer function>])

В параметре stmt указывается код (в виде строки), для которого измеряем время выполнения. Параметр setup позволяет указать код, который будет выполнен перед измерением времени выполнения кода в параметре stmt.

Например, в параметре setup можно подключить модуль.

Получить время выполнения можно с помощью метода timeit ( [number=1000000]). В параметре number указывается количество повторений. Для примера просуммируем числа от 1 до 10000 тремя сnособами и выведем время выполнения каждого сnособа (листинг 10.4) .

# Листинг_10.4. Измерение времени выполнения
# -*- coding: utf-8 -*-
from timeit import Timer
code1 = «»»\
i, j = 1, 0
while i < 10001:
‘    j += i
‘    i += 1
«»»
t1 = Timer(stmt=code1)
print(«while:», t1.timeit(number=10000))
code2 = «»»\
j = 0
for i in range(1, 10001):
‘    j += i
«»»
t2 = Timer(stmt=code2)
print(«for:», t2.timeit(number=10000))
code3 = «»»\
j = sum(range(1, 10001))
«»»
t3 = Timer(stmt=code3)
print(«sum:», t3.timeit(number=10000))
input()

Примерный результат выполнения (зависит от мощности компьютера):
while: 17.26802443580117
for: 9.602403053818772
sum: 3.067899091205735

На моём ноутбуке получены такие результаты:
while: 41.55120102917928
for: 23.030579681389646
sum: 7.445543743319618

Как видно из результата, цикл for работает в два раза быстрее цикла while, а функция sum () в данном случае является самым оптимальным решением задачи.

Метод repeat([repeat=3] [, number=1000000]) вызывает метод timeit() указанное количество раз (задается в параметре repeat) и возвращает список значений. Аргумент number передается в качестве параметра методу timeit (). Для примера создадим список со строковыми Представлениями чисел от 1 до 10000. В первом случае для создания списка используем цикл for и метод append (),а во втором- генератор списков (листинг 10.5).

Листинг 10.5. Использование метода repeat()
# -*- coding: utf-8 -*-
from timeit import Timer
code1 = «»»\
arr1 = []
for i in range(1, 10001):
‘ arr1.append(str(i))
«»»
t1 = Timer(stmt=code1)
print(«append:», t1.repeat(repeat=3, number=2000))
code2 = «»»\
arr2 = [str(i) for i in range(1, 10001)]
«»»
t2 = Timer(stmt=code2)
print(«генератор:», t2.repeat(repeat=3, number=2000))
input()

Примерный результат выполнения:
append: [9.98154294362325, 9.997541285814483, 10.004275691347512]
генератор: [7.879446040575054, 7.924527742041953, 7.844603314867392]

На моём ноутбуке получены такие результаты:
append: [27.529709871288585, 26.59919227347495, 24.542013299966086]
генератор: [17.88548844413438, 18.161865323442626, 18.18962500240015]

Как видно из результата, генераторы списков работают быстрее.

Возиться с форматированием результатов не стал, так как повторно измерять результаты не собираюсь.

При отладке программ имеет смысл сначала уменьшить number до 100, чтобы не ждать слишком долго.

Вскоре запущу эти программы на ноутбуке с более быстрым процессором — результаты доложу.

Когда умудрюсь откомпилировать эти программы, смогу выяснить достигнутую прибавку скорости.

Приглашаю всех высказываться в Комментариях. Критику и обмен опытом одобряю и приветствую. В хороших комментариях сохраняю ссылку на сайт автора!

И не забывайте, пожалуйста, нажимать на кнопки социальных сетей, которые расположены под текстом каждой страницы сайта.
Python Время выполненияПродолжение тут…

Deviz_8

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.