Python统计代码执行时间:datetime.now()与time.perf_counter()该选哪个?
不同Python计时方案的差异说明
核心结论:datetime.now() 和 time.perf_counter() 效果完全不等价,前者统计代码执行耗时存在明确的缺陷,仅适合非精准的粗粒度耗时估算,性能测试等对精度有要求的场景必须使用time.perf_counter()。
两者核心差异点
- 时钟类型不同
datetime.now()读取的是系统的墙上时钟,也就是我们日常使用的民用时间,这个时间会被系统自动校时、时区调整、夏令时切换等操作修改,如果计时过程中出现系统时间跳变,最终得到的时间差会完全失真,极端情况下甚至会出现负数结果。time.perf_counter()读取的是系统的单调时钟,从系统启动后就会保持单向递增,不会受到任何系统时间配置修改的影响,设计目的就是专门用来计算时间间隔。 - 计时精度不同
datetime.now()精度普遍只有毫秒级,对于微秒级的短代码块执行耗时统计误差极大,完全无法满足性能测试的要求。time.perf_counter()是Python官方提供的最高精度计时接口,多数操作系统下能达到微秒甚至纳秒级精度,适配所有代码耗时统计场景。 - 适用场景不同
仅当你需要统计数小时以上的大脚本粗略耗时,且能确认计时周期内不会出现系统时间调整时,使用datetime.now()才能得到近似正确的结果,其他所有场景都应该优先选择time.perf_counter()。
顺带提一下你提到的time.time(),它和datetime.now()同属墙上时钟范畴,同样存在系统时间跳变导致结果失真的问题,也不推荐用于代码耗时统计。
内容的提问来源于stack exchange,提问作者zabop
相关产品推荐
相关产品推荐

