2013-06-04 5 views
2

Каков наилучший (точный) способ измерения времени работы функции, например:Мера Время выполнения функции

def some_function(): 
    # ... 

Я предпочел бы вызвать эту функцию в 1000 раз, а затем подсчитать среднее время, как это:

start = time.time() 

for i in range(1000): 
    some_function() 

elapsed = (time.time() - start)/1000 

но, возможно, есть ли лучший способ?

+0

использовать модуль timeit мой ... –

+1

Рекомендации для Cprofile также очень информативно ... но не делает совсем то, что вы хотите здесь –

ответ

4

Вы должны использовать timeit модуль Я думаю

import timeit 
t = timeit.Timer('some_function(*args)', # code to run 
       'from __main__ import some_function, args') # initial code 
               #run before time measurement 
t.timeit(100) # times to run 
+0

но то, что, когда мой some_function имеет параметр, и я хочу назвать 'some_function (some_object) '? –

+0

Вы должны подготовить его в исходном блоке и использовать его в тайм-блоке, я думаю – oleg

1

Я согласен, что timeit является де-факто «модуль», чтобы запустить собственные тайминги на источник Python. Однако, если вы заинтересованы в том, чтобы сделать тяжелую работу с точки зрения профилирования, вы можете найти что-то вроде runnakerun полезным (инструмент визуализации для профайлера, родного Python).

Отрывок из runsnakerun (который на самом деле просто использует данные из питоны профайлера):

сортных виды данных сетки для информации сырым профиля

identity: имя функции, имя файла, имя каталога

время провело: cummulative, cummulative за местный и локальный за время

общих данных Сетка

(все) абоненты-из-этой-функции (все) вызываемые методы, в -за функция просмотров

Только для дополнительной да я знаю «измы ... вы просили что-то простое, и это WAY над верхней частью. Но я думал, что поделюсь другим возможным решением, если вам понадобится дополнительная информация по дороге. И если вы не найдете это полезным, может быть, кто-то еще!

Чтобы получить файл профиля вывода, который будет работать в runsnakerun, запустить что-то вроде:

$ python -m cProfile -o <outputfilename> <script-name> <options> 

В качестве альтернативы, если Вы разрабатываете в * NIX вы можете использовать time, но теперь вы добавили накладные расходы и, возможно, потерять часть что модуль Python timeit может предложить.

Для разных нужд требуются разные решения - просто добавьте свои трюки.

НТН

Смежные вопросы