Python中如何获取两次调用之间的毫秒级时间差?
如何准确获取两次连续调用之间的毫秒数?
先澄清常见误解,再给出最优方案:
梳理各时间方法的实际问题
time.clock():Python 3.3+已明确弃用,无需考虑time.time():基于系统纪元时间,会受闰秒、手动调整系统时间等影响,计算时间间隔不可靠time.process_time()/time.thread_time():仅统计CPU运行时间,会忽略休眠、IO等待等非CPU耗时,不适合需要真实时间间隔的场景time.monotonic():单调递增但精度依赖系统,整体性能计数器精度不如perf_counter系列time.perf_counter():返回浮点数,双精度浮点数能精确表示到2^53以内的整数,对应到毫秒级相当于约89000年的时长,日常使用中完全不存在精度损失问题time.perf_counter_ns():返回整数纳秒,不存在最多追踪4秒的限制——Python的整数是任意精度类型,不会像其他语言的固定位数整数那样出现溢出,完全可以追踪极长时间的间隔
最优方案:封装自定义的perf_counter_ms()
如果你需要返回整数毫秒、同时保证高精度和长追踪时长,直接基于perf_counter_ns()封装即可:
import time def perf_counter_ms(): # 将纳秒转换为毫秒,取整得到整数结果 return time.perf_counter_ns() // 1000000
这个方法具备以下优势:
- 继承
perf_counter_ns()的高精度与单调性,不受系统时钟调整影响 - 返回整数毫秒,完全满足精度需求
- Python的任意精度整数支持,追踪时长没有上限(远超你提到的400万秒)
如果只是需要毫秒级精度,直接使用time.perf_counter()也完全足够——它的浮点数精度在日常场景下不会带来任何问题,计算间隔时只需用后一次调用值减去前一次,再乘以1000即可得到毫秒数:
start = time.perf_counter() # 执行需要计时的代码 end = time.perf_counter() elapsed_ms = (end - start) * 1000
内容的提问来源于stack exchange,提问作者Mike 'Pomax' Kamermans
相关产品推荐
相关产品推荐

