2012-03-12 2 views
2

Есть ли команда bash или библиотека Python, которая будет время времени для выполнения файла/команды? Я хочу, чтобы иметь возможность решить, какой язык будет работать лучше всего для задачи или иметь возможность точно знать, что код Python A работает быстрее, чем код Python B. Если есть способ сделать это, но этот вопрос не соответствует теме, пожалуйста, оставьте комментарий с условиями поиска или другими ресурсами.Утилита для проверки времени выполнения?

ответ

3

Да, это называется командой time. Как и в time command arg1 arg2 arg3.

Это выводит 3 поля, что-то вроде этого:

real 0m0.631s 
user 0m0.154s 
sys  0m0.458s 

Первое фактическое время на стене часы. Во-вторых, как долго программа проходит в пространстве пользователя. Третья - как долго программа тратится на пространство ядра.

1

time

Например:

time ls -a 

дает, после листинга файлов,

real 0m0.240s 
user 0m0.002s 
sys  0m0.004s 

Есть много вариантов для того, что для отслеживания с точки зрения ресурсов. См. Справочную страницу.

0
python -m timeit "setup" "code" 

если хотите время Python код. Полезно для быстрого и грязного тестирования производительности.

2

Вы можете использовать timeit:

from timeit import timeit 
print timeit("function_2(arg)", "from __main__ import function_2, arg", number=5) 

Things отметить:

  • from __main__ import function, arg предоставляет доступ к timeit модуля к функциям и переменным в скрипте.
  • Функция и связанные с ней аргументы должны передаваться как строки.
  • номер = количество прогонов [по умолчанию 1000000].
  • Время, возвращенное timeit, составляет сумму number работает ... НЕ СРЕДНЕЕ (поймал меня однажды ...).
+0

В то время как я не принимаю это, я + 1ed его. Жаль, что я не могу принять кратные. : D Спасибо! – CoffeeRain

0

Я использую этот фрагмент кода, который я нашел в Интернете где-то, что я не могу вспомнить:

import atexit 
import time 
def secondsToStr(t): 
    return "%d:%02d:%02d.%03d" % \ 
     reduce(lambda ll,b : divmod(ll[0],b) + ll[1:], 
      [(t*1000,),1000,60,60]) 

line = "="*40 
def log(s, elapsed=None): 
    print line 
    print secondsToStr(time.clock()), '-', s 
    if elapsed: 
     print "Elapsed time:", elapsed 
    print line 
    print 

def endlog(): 
    end = time.clock() 
    elapsed = end-start 
    log("End Program", secondsToStr(elapsed)) 

def now(): 
    return secondsToStr(time.clock()) 

start = time.clock() 
atexit.register(endlog) 
log("Start Program") 
Смежные вопросы