2014-11-23 3 views
1

(Python 2.7.8, Windows)Временной функция питона

есть так много вопросов уже об этой конкретной теме, но я не могу показаться, чтобы получить какие-либо из них работает.

Итак, что я пытаюсь выполнить, это время, необходимое для выполнения функции.

У меня есть functions.py и main.py в следующем виде:

#functions.py 
def function(list): 
    does something 
    return list 
... 

#main.py 
import functions 
...stuff... 
while: 
    list = gets list from file 
    functions.function(list) <--- this needs to get timed 

Теперь я попытался time.time() начальные и конечные точки первыми, но это не достаточно точно (разница, как правило, 0.0), и после того, как похоже, что это не путь. По-видимому, я должен использовать (?) Модуль timeit. Однако я не могу понять, как получить в нем функцию.

Любая помощь?

ответ

2

Как уже упоминалось, есть модуль Python сделал для этой самой задачи, timeit. Его синтаксис, в то время как немного своеобразных, довольно легко понять:

timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000) 

stmt является вызов функции измерения, в вашем случае: functions.function(list)

setup это код, который нужно создать контекст, необходимый для stmt выполнить, в вашем случае: import functions; list = gets list from file

number, сколько времени timeit будет работать stmt найти свое среднее время выполнения. Возможно, вы захотите изменить номер, так как вызов вашей функции в миллион раз может занять некоторое время. .

Т.Л., д-р:

timeit.timeit(stmt='functions.function(list)', setup='import functions; list = gets list from file', number=100) 
+0

Спасибо, это в основном то, что я пробовал, но, по-видимому, мой синтаксис для настройки был отключен. – questions989

+0

@ questions989 рад помочь :) – oxymor0n

0
start = timeit.default_timer() 
my_function() 
elapsed = timeit.default_timer() - start 
+0

Это похоже на работу, однако в соответствии с документацией «О любой платформе, default_timer() измеряет время настенных часов, а не время ЦП Это означает, что другие процессы, запущенные на том же компьютер может помешать синхронизации ». И если функция переходит непосредственно к timeit, она делает несколько проходов, что, вероятно, повышает точность. Разве это то, о чем я должен быть знаком, или это тривиально? – questions989

+0

вы обычно хотите время настенных часов, которое учитывает переключение контекста и побочные эффекты, которые требуют времени, не измеряемого чистым временем процессора. –

+0

@CoreyGoldberg вы уверены? если он явно не хочет принимать во внимание время ввода-вывода и другие побочные эффекты, путь к эталонному алгоритму заключается в измерении времени процессора. По крайней мере, это в академических кругах. – oxymor0n

0

вы видите эту демку: time.time

>>> def check(n): 
...  start = time.time() 
...  for x in range(n): 
...   pass  
...  stop = time.time() 
...  return stop-start 
... 
>>> check(1000) 
0.00
>>> check(10000) 
0.0012159347534179688 
>>> check(100) 
1.71661376953125e-05 

вышеприведенная функция возвращает гул много времени в секундах, принятого для для п петель.

поэтому алгоритм:

start = time.time() 
# your stuff 
stop = time.time() 
time_taken = stop - start 
+0

Да, это то, что я пробовал, но он возвращает 0.0 – questions989

+0

Вы запустили мой код, и он говорит 0.0 невозможно – Hackaholic

+0

Вы используете Linux? По-видимому, разные ОС используют time.time и time.clock по-разному. Если я заменяю время на .clock вашего кода, то получаю похожие результаты. – questions989

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