Python中time.perf_counter()方法的时间参考基准点是什么
time.perf_counter()的时间参考基准说明 time.perf_counter()没有公开、固定的绝对时间基准点,从设计上就不支持转换为现实日期对应的墙钟时间。
- 这个函数的唯一设计用途是提供高精度的短间隔计时,用来统计代码段运行耗时。它的计数起点是系统实现时自行选定的未定义值:在macOS上通常是进程启动的时间点,部分系统上也可能是CPU上电运行的时间点,不同操作系统、不同Python版本、甚至同个系统下每次重新运行脚本,这个起点都可能发生变化,和Unix时间使用的1970年1月1日纪元点没有任何绑定关系。
- 你测试中得到的820秒左右的返回值,只是从这个未定义起点到调用时刻的经过秒数。直接把这个值传给
time.localtime()时,该函数会默认把输入参数当做「从1970年1月1日0点开始累计的Unix时间戳」解析,自然会得到1970年的错误时间,属于典型的接口误用,不是函数本身的bug。 - 你测试脚本里用到的
time.process_time()逻辑完全一致:它返回的是当前进程累计消耗的CPU运行时间,同样没有固定绝对时间基准,仅适合计算CPU占用耗时,不能用来转换为墙钟时间。
所有基准点未定义的计时类接口,包括
perf_counter、process_time、monotonic,唯一合法的用法是记录调用前后的两个返回值做差,得到中间经过的时间长度,单独拿某一个时刻的返回值做时间转换没有任何实际意义。
正确用法参考
如果需要测量代码运行耗时:
import time start = time.perf_counter() # 填入需要统计耗时的业务逻辑 time.sleep(1) cost = time.perf_counter() - start print(f"代码执行耗时: {cost:.3f}秒")
如果需要获取当前的现实时间(墙钟时间),请使用基准点固定为Unix纪元的time.time()获取时间戳再做转换:
import time # 输出当前本地时间的正确写法 print(time.asctime(time.localtime(time.time())))
内容的提问来源于stack exchange,提问作者M Sty
相关产品推荐
相关产品推荐

