Утилита для проверки времени выполнения?


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

5 2

5 ответов:

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

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

real    0m0.631s
user    0m0.154s
sys     0m0.458s
Первый - это фактическое время настенных часов. Во-вторых, сколько времени программа провела в пользовательском пространстве. Третий - сколько времени программа провела в пространстве ядра.

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

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

Что следует отметить:

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

time

Например:

time ls -a

Дает, после перечисления файлов,

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

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

python -m timeit "setup" "code"

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

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

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")