time.time() значения прыжков
Проблема: при вызове функции time.time() я замечаю, что она скачет примерно через 30 секунд после перезагрузки. Под прыжком я подразумеваю, что он мгновенно меняет свое возвращаемое значение примерно на 40 секунд.
Установка: я запускаю свой скрипт на Raspberry Pi 3B, сразу после перезагрузки. Эта проблема не возникает при запуске позже.
Вопрос: почему это происходит? Я подозреваю, что Raspberry меняет свои системные часы в какой-то момент после перезагрузки через WiFi. Может ли это быть проблемой? Я не думаю, что размещение кода полезно, так как это действительно вопрос, связанный с функцией time.time().
3 ответа
Многие операционные системы обновляют свои часы при загрузке. time.time()
возвращает время, прошедшее с начала эпохи, поэтому, если часы меняются, меняется и дельта между сейчас и эпохой.
Вы можете использовать монотонный таймер, если хотите избежать этих скачков. Python 3.3 представлен time.monotonic()
Проверьте это. Из документации:
Возвращает значение (в долях секунды) монотонных часов, т.е. часов, которые не могут двигаться назад. На часы не влияют обновления системных часов. Контрольная точка возвращаемого значения не определена, поэтому допустима только разница между результатами последовательных вызовов.
Для Python < 3.3 есть также монотонный сторонний пакет.
Это наиболее вероятно, потому что Raspberry Pi не имеет часов реального времени. Я бы вместо этого рекомендовал вам использовать монотонность. Это должно обеспечить вам последовательный вывод, независимо от того, изменятся ли системные часы.
Библиотека, которую я обычно использую, доступна здесь и поддерживает как Python 2.7, так и Python 3.X.
Проверьте, настраивает ли он часы от внешнего источника, такого как NPT.