Пришлось реализовать замер времени выполнения кода и вспомнил один вариант на который когда-то натолкнулся. (К сожалению ссылку на оригинал потерял, но принцип очень простой).
Создаём класс с двумя переопределёнными методами:
И далее в коде используем следующим образом:
Очень хорошая статья поясняющая детали.
Если есть ещё какие-нибудь красивые методы был бы рад о них услышать.
Создаём класс с двумя переопределёнными методами:
import time class Profiler(object): def __enter__(self): self._startTime = time.time() def __exit__(self, type, value, traceback): print "Elapsed time: {:.3f} sec".format(time.time() - self._startTime)
И далее в коде используем следующим образом:
with Profiler() as p: // your code to be profiled hereСоответсвенно всё понятно из приведённого примера. При входе в конструкцию with объект создаётся, а при выходе гарантированно завершается. Даже при возникновении исключения.
Очень хорошая статья поясняющая детали.
Если есть ещё какие-нибудь красивые методы был бы рад о них услышать.
Отличный пример, только опечатку надо поправить ;)
ReplyDeletewith Profiler() as p:
Тимур, спасибо. Поправил.
DeleteThis comment has been removed by the author.
ReplyDeleteОгромная благодарность. Мне это и было нужно.
ReplyDelete# пример для Python 3
ReplyDeleteimport math, time
class Profiler(object):
def __enter__(self):
self._startTime = time.time()
def __exit__(self, type, value, traceback):
print ("Elapsed time: {:.3f} sec".format(time.time() - self._startTime))
with Profiler() as p:
# your code to be profiled here
value = 0.0
msqrt = 0.0
for i in range (100000):
msqrt = math.sqrt(i)
value += math.sqrt(i)
value += math.sqrt(value)
print (i, ' ', msqrt,' ', value)
Красивый метод - использование декораторов:
ReplyDelete'''
import time
def benchmark(func):
def wrapper(*args, **kwargs):
t = time.clock()
res = func(*args, **kwargs)
print(func.__name__, time.clock() - t)
return res
return wrapper
'''
Потом перед функцией пишем @benchmark и она будет исполнена с замером времени выполнения
я не стал париться и в своей программе в нужных местах просто нашёл время с начала эпохи в секундах, а потом через разность) работает.
ReplyDeleteimport time
a=time.time()
#ост. код
b=time.time()
timepr=b-a
(писал на питон 3, винда)