Значение возвращаемое time.time() основано на системном времени и напрямую зависит от него, поэтому замерять время выполнения кода не совсем удачная идея, если системное время может изменится



Этого можно избежать используя monotonic() из time. Последовательные вызовы возвращают только возрастающие значения, и они не могут быть ниже предыдущего вызова



Для монотонных часов начало отсчета не определено, поэтому вычисления с ними полезны только с использованием start и end



В данном примере они используются для измерения паузы программы, но вы также можете измерять время выполнения определенных участков кода и заменять их на более быстрые реализации