Python:不受系统时钟变动影响的程序耗时测量需求
解决方案:使用单调时钟替代系统墙上时钟
你的问题核心在于time.time()依赖系统墙上时钟,而NTP同步会直接修改这个时钟的数值,导致计算的时间差完全失真。要解决这个问题,你需要使用单调递增的时钟——这类时钟只会持续向前走,不受系统时钟调整(包括NTP同步、手动修改时间)的影响。
在Python中,有两个适合的函数:
1. time.monotonic()
这个函数返回从某个固定起点开始的单调递增时间值,单位是秒。它的精度足够满足大多数计时需求,且完全不受系统时钟变动的干扰。
替换后的代码:
import time start = time.monotonic() # 等待输入并完成任务 end = time.monotonic() elapsed = end - start
2. time.perf_counter()
如果需要更高精度的计时(比如测量微秒级的耗时),可以用这个函数。它同样是单调递增的,专门针对性能优化的计时场景设计,精度比monotonic()更高。
代码示例:
import time start = time.perf_counter() # 等待输入并完成任务 end = time.perf_counter() elapsed = end - start
注意事项
- 这两个函数从Python 3.3开始内置,树莓派Zero上的默认Python版本(一般是3.7+)完全支持。
- 它们返回的时间值没有实际的“日历时间”意义,仅能用来计算时间差,正好匹配你测量程序耗时的需求。
- 无论NTP同步将系统时钟往前或往后调整,这两个函数计算出的差值都会准确反映实际经过的时间。
内容的提问来源于stack exchange,提问作者anonymousaga
相关产品推荐
相关产品推荐

