понедельник, 8 июня 2015 г.

python: замеряем время выполнения блока

time.time

Очень простой и вполне рабочий метод на базе time, работает даже во 2 питоне (в 3 есть ещё несколько функций в модуле, с бОльшей точностью)

import time
tt=time.time()
our_func()
print "Seconds: " + time.time()-tt

в windows нужен time.clock

Несколько обёрток
1) класс
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


2) декоратор
import time
def howlong(f):
    def tmp(*args, **kwargs):
        t = time.time()
        res = f(*args, **kwargs)
        need_time = time.time()-t
        tmp.__name__ = f.__name__
        tmp.__doc__ = f.__doc__
        #print u"%s time: %f" % ((f.__doc__), need_time)
        print ".",
        return need_time
    return tmp

в коде
@howlong
def our_func() ...


timeit

Основная функция timeit.Timer
Требует всяких сетапов, более заморочен, но лучше подходит для замеров всяких циклов. Для вычисления работы 1 функции слишком геморно.

Комментариев нет:

Отправить комментарий