Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2010 15:44:14

FewG
От:
Зарегистрирован: 2010-11-07
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Время исполнения функции

Я прочитал, что можно замерить время выпролнения функции с помощью модуля time.

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

import time

a = 2 + 5
b = (a*10)+50
print(b, time.clock())
В консоле виден результат и время выполнения, который равен нулю. Как так получилось? Да и вообще, как правильно замерять время исполнения функции.



Офлайн

#2 Ноя. 28, 2010 16:37:32

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Время исполнения функции

Офлайн

#3 Дек. 8, 2010 22:36:03

AlSolo
От:
Зарегистрирован: 2010-11-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Время исполнения функции

а так нельзя ?

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()…..



Офлайн

#4 Дек. 9, 2010 00:35:44

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Время исполнения функции

AlSolo
смешнее всего что в соседнем посте вы спрашивали как написать if … xD



Офлайн

#5 Дек. 9, 2010 07:01:16

AlSolo
От:
Зарегистрирован: 2010-11-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Время исполнения функции

sp3
Я не про if спрашивал…меня не правильно поняли, я не правильно мысль изложил…



Офлайн

#6 Дек. 9, 2010 11:44:42

FewG
От:
Зарегистрирован: 2010-11-07
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Время исполнения функции

Если кому-нибудь понадобится, то вот я написал такое:

# Импорт Функции 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))



Отредактировано (Дек. 9, 2010 11:49:40)

Офлайн

#7 Дек. 9, 2010 12:42:22

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Время исполнения функции

Это по нашему - катаемся только на велосипедах собственного изготовления!



Офлайн

#8 Дек. 9, 2010 15:42:26

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Время исполнения функции

Андрей Светлов
на велосипедах собственного изготовления
Вот еще один велосипед:

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



Офлайн

#9 Дек. 9, 2010 17:43:23

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Время исполнения функции

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

Для сбора статистики приходится городить свои системы, привязанные к обрабатываемому приложению. Для замера скорости выполнения “просто функции” всё уже придумали до нас.



Офлайн

#10 Дек. 9, 2010 23:20:09

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Время исполнения функции

Андрей Светлов
Любителям велосипедов посвящается…
=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, как говорил один финн ;)



Отредактировано (Дек. 9, 2010 23:54:31)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version