Python中datetime计算时间差有时返回0?如何获取准确时长?
如何确保总能获取到函数执行的时间差
你的问题出在datetime.now()的精度限制上。这个方法依赖系统本地时钟,当函数内的操作执行速度极快(耗时小于系统时钟的最小更新间隔,通常是1毫秒左右),两次调用datetime.now()会得到完全相同的时间戳,自然计算出的时间差就是0——不管你用microseconds还是total_seconds()转换,结果都是0,因为时间差本身就是0。
要解决这个问题,应该使用专门为短时间间隔测量设计的time.perf_counter(),它提供了比datetime.now()高得多的精度(通常能到纳秒级),专门用于性能计时场景。
修改后的代码如下:
import time def my_function(): start_time = time.perf_counter() # Do something end_time = time.perf_counter() # 返回秒为单位的时间差,保留足够小数位 return end_time - start_time print(my_function())
关键说明:
time.perf_counter()返回高精度浮点数,单位为秒,即使操作耗时只有几微秒,也能准确捕捉到非零的时间差。- 如果需要以微秒/毫秒为单位展示,直接对结果转换即可:
- 毫秒:
(end_time - start_time) * 1000 - 微秒:
(end_time - start_time) * 1_000_000
- 毫秒:
- 不要用
time.time()替代,它的精度同样受系统时钟限制,还可能受系统时间调整(比如NTP同步)影响,而perf_counter()是单调递增的,不受系统时间变化干扰。
内容的提问来源于stack exchange,提问作者Aiden3301
相关产品推荐
相关产品推荐

