Время выполнения кода в PHP и Python
Иногда при написании скриптов требуется узнать, сколько времени скрипт выполняется. Для этого есть несколько способов. Во-первых, можно воспользоваться стандартной для Unix-систем утилитой time:
Она выдаст что-то вроде
Здесь нас интересует первое значение: real. Оно показывает, сколько реального времени заняло выполнение скрипта. User и sys показывают потраченное процессорное время в режиме пользователя и режиме ядра, которое, даже суммарно, может быть меньше реального из-за простоя и ожидания.
Но утилита time замеряет полное время выполнения, с учетом затрат на запуск интерпретатора, загрузку скрипта и т.п., что не всегда желательно.
Поэтому иногда бывает целесообразнее использовать средства самого языка программирования. В PHP для этого используется функция microtime:
В Python все аналогично, только необходимо подключить модуль time:
В JavaScript это выглядит чуть иначе — необходимо использовать объекты Date:
time script.sh
time python script.py
time php script.php
Она выдаст что-то вроде
real 0m0.012s
user 0m0.004s
sys 0m0.000s
Здесь нас интересует первое значение: real. Оно показывает, сколько реального времени заняло выполнение скрипта. User и sys показывают потраченное процессорное время в режиме пользователя и режиме ядра, которое, даже суммарно, может быть меньше реального из-за простоя и ожидания.
Но утилита time замеряет полное время выполнения, с учетом затрат на запуск интерпретатора, загрузку скрипта и т.п., что не всегда желательно.
Поэтому иногда бывает целесообразнее использовать средства самого языка программирования. В PHP для этого используется функция microtime:
$start_time = microtime(true); // true — получать данные в
// какой-то код
$time = microtime(true)-$start_time; // в переменой $time будет время в секундах,
// которое потрачено на выполнение кода
В Python все аналогично, только необходимо подключить модуль time:
import time
start_time = time.time()
# какой-то код
time = time.time()-start_time // время выполнения также будет в секундах
В JavaScript это выглядит чуть иначе — необходимо использовать объекты Date:
let start_time = new Date;
# какой-то код
time = (new Date -start_time)/1000 // разность между двумя объектами Date измеряется в милисекундах,
// поэтому делим ее на тысячу
/usr/bin/time -f '\nВремя работы: %E\nПроцессорное время, сек.: kernel mode - %S, user mode - %U\nМаксимальный размер процесса, KB: %M\nИспользование файловой системы: чтение - %I, запись - %O\nПолучено сигналов: %k\nКод завершения: %x' python script.py
Для удобства можно добавить alias в ~/.bashrc или ~/.zshrc:
alias time='/usr/bin/time -f '\''\nВремя работы: %E\nПроцессорное время, сек.: kernel mode - %S, user mode - %U\nМаксимальный размер процесса, KB: %M\nИспользование файловой системы: чтение - %I, запись - %O\nПолучено сигналов: %k\nКод завершения: %x'\'