Найти - Пользователи
Полная версия: Время исполнения функции
Начало » Python для новичков » Время исполнения функции
1 2
FewG
Я прочитал, что можно замерить время выпролнения функции с помощью модуля time.

Написал такой скрипт:

import time

a = 2 + 5
b = (a*10)+50
print(b, time.clock())
В консоле виден результат и время выполнения, который равен нулю. Как так получилось? Да и вообще, как правильно замерять время исполнения функции.
Андрей Светлов
http://docs.python.org/library/timeit.html
AlSolo
а так нельзя ?
from threading import *
import random
a = 2 + 5
def print_b():
b = (a*10)+50
print b

t=Timer(random.random()*10,print_b)
t.start()
Время выполнения будет до 10 сек. вроде…
ну можно сделать проверку добавив 2 строчки time.ctime()…..
sp3
AlSolo
смешнее всего что в соседнем посте вы спрашивали как написать if … xD
AlSolo
sp3
Я не про if спрашивал…меня не правильно поняли, я не правильно мысль изложил…
FewG
Если кому-нибудь понадобится, то вот я написал такое:

# Импорт Функции 1
from iterativ import iterativ
# Импорт Функции 2
from rekursiv import rekursiv
from time import clock

start1 = clock()
test1 = iterativ(25, 10)
end1 = clock()

start2 = clock()
test2 = rekursiv(25, 10)
end2 = clock()

print("Result (iterativ): ", test1, "\nDie Funktion lief %1.10f Sekunden" % (end1 - start1))
print("\nResult (rekursiv): ", test2, "\nDie Funktion lief %1.10f Sekunden" % (end2 - start2))
Андрей Светлов
Это по нашему - катаемся только на велосипедах собственного изготовления!
Subideal Ox
Андрей Светлов
на велосипедах собственного изготовления
Вот еще один велосипед:

import time

def time_bike (func):
def time_gear(*arg_list, **arg_dict):
take_the_mark = time.clock()
func(*arg_list, **arg_dict)
halt = time.clock()
time_gear.my_record = halt - take_the_mark
return time_gear

if __name__ == '__main__' :
@time_bike
def any_func(x):
return range(x)

any_func(1000000)
print any_func.my_record

class AnyClass :
@time_bike
def any_method(self,x):
return range(x)

inst = AnyClass()
inst.any_method(1000000)
print inst.any_method.my_record
По-моему, удобно =D
Андрей Светлов
Любителям велосипедов посвящается…
Модуль timeit появился не на пустом месте.
Особенности:
- многократный запуск тестируемого кода. Среднее время гораздо лучше, чем “первый раз”. Особенно заметно на быстром коде.
Чем меньше измеряемые промежутки, тем выше погрешность единичного измерения.
- возможность указывать как функции, так и текст с кодом (будет откомпилирован).
- time.clock хорош только на windows. На всех прочих платформах time.time дает более высокую точность.

Для сбора статистики приходится городить свои системы, привязанные к обрабатываемому приложению. Для замера скорости выполнения “просто функции” всё уже придумали до нас.
Subideal Ox
Андрей Светлов
Любителям велосипедов посвящается…
=D Алаверды любителям “мы продаем автомобили любого цвета, если этот цвет черный”

Андрей Светлов
Модуль timeit появился не на пустом месте.
1. Этот трюизм, не делает timeit универсальным.
2. Модуль timeit появился в результате изобретения и развития велосипеда - согласитесь, функций time и немного логики вполне достаточно для решения его задач.

Андрей Светлов
многократный запуск тестируемого кода
1. reduce и map do time it многократно
2. а если нужно одно конкретное значение - для сетевой библиотеки или клиента базы данных (особенно заметно на медленном коде :) )

Андрей Светлов
Среднее время гораздо лучше, чем “первый раз”.
Или медиана? У нас ведь будет что-то вроде Пуассона с выбросами на большей стороне, да? А может минимальное лучше, чем среднее? ;) или среднее первого квартиля? или дециля?:) Это бессмысленное утверждение без указания конкретной задачи.

Андрей Светлов
возможность указывать как функции, так и текст с кодом (будет откомпилирован)
По-моему, только текст с кодом, или нет? Как раз для отдельных функций и, тем более, методов классов timeit не очень удобен (чисто с эстетической точки зрения, то есть на мой вкус =) ).

Андрей Светлов
time.clock хорош только на windows
Опять же - зависит от целей:
Из документации
On Unix, return the current processor time as a floating point number expressed in seconds. The precision, and in fact the very definition of the meaning of “processor time”, depends on that of the C function of the same name, but in any case, this is the function to use for benchmarking Python or timing algorithms.
Андрей Светлов
Для замера скорости выполнения “просто функции” всё уже придумали до нас.
Все правильно, только иногда проще сделать самому, чем прилаживать чужие решения к своим задачам. Особенно если задача на десяток строчек.
Ну и, наконец, изобретение велосипедов может просто приносить удовольствие - just for fun, как говорил один финн ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB