Существует ли простой способ/модуль правильно измерить прошедшее время в python? Я знаю, что я могу просто называть time.time()
дважды и учитывать разницу, но это приведет к неправильным результатам, если системное время будет изменено. Конечно, это происходит не очень часто, но это указывает на то, что я измеряю неправильную вещь.
Использование time.time()
для измерения продолжительности невероятно круговое, когда вы думаете об этом. Вы принимаете разницу между двумя измерениями абсолютного времени, которые, в свою очередь, построены по измерениям продолжительности (выполняются таймерами) и известным абсолютным временам (устанавливаются вручную или через ntp), что вас совсем не интересует.
Итак, есть ли способ запросить это "время таймера" напрямую? Я бы предположил, что его можно представить как миллисекунду или микросекунду, которая не имеет значимого абсолютного представления (и, следовательно, ее не нужно настраивать с системным временем). Оглядываясь немного, кажется, что это именно то, что System.nanoTime()
делает в Java, но я не нашел соответствующую функцию Python, хотя он должен (технически-технически) быть проще, чем time.time()
.
Изменить: Чтобы избежать путаницы и ответить на приведенные ниже ответы: речь идет не о изменениях DST, и я также не хочу процессорного времени - я хочу истекшее физическое время. Он не должен быть очень мелкозернистым и даже не особенно точным. Это просто не должно давать мне отрицательную длительность, или длительность, которая отключена на несколько порядков (выше гранулярности), только потому, что кто-то решил установить системные часы на другое значение. Здесь, что Python docs говорит о "time.time()":
Это именно то, чего я хочу избежать, поскольку это может привести к странным вещам, таким как отрицательные значения во временных расчетах. Я могу обойти это на данный момент, но я считаю, что это хорошая идея, чтобы научиться использовать правильные решения там, где это возможно, поскольку kludges вернутся, чтобы укусить вас в один прекрасный день.
Edit2: Некоторые исследования показывают, что вы можете получить независимое от системы измерение, которое я хочу в Windows с помощью GetTickCount64(), под Linux вы можете получить его в возвращаемом значении times(). Тем не менее, я до сих пор не могу найти модуль, который предоставляет эту функциональность в Python.