You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何获取分辨率达1微秒的精确时间?

Python获取1微秒精度时钟时间的可行方案

time.time()返回浮点数格式的Unix时间戳,本身存在浮点数精度损耗,加上不同操作系统对默认系统时钟的分辨率限制,多数场景下实际分辨率只有10~15微秒,Windows部分旧环境甚至更低,确实无法满足1微秒级的精度要求,以下是经过实测可用的方案:

  • 跨平台优先选择:time.perf_counter_ns()(Python 3.7+)
    这是Python标准库提供的最高精度计时接口,底层直接读取CPU/主板提供的硬件级高性能计数器,不受NTP校时、系统时钟跳变影响,返回值为整数类型的纳秒计数,实际硬件层面分辨率普遍在100ns~1us区间,完全满足1微秒精度要求。
    基础调用示例:

    import time
    
    def get_highres_usec():
        # 返回微秒级高精度单调时间
        return time.perf_counter_ns() // 1000
    

    如果需要获取绝对Unix时间戳(从1970年起算的时间),只需要在程序启动阶段做一次偏移校准,多次采样抵消单次读取的误差即可:

    import time
    
    # 启动时采样100次计算平均偏移,降低校准误差
    offset_samples = []
    for _ in range(100):
        perf_t = time.perf_counter_ns()
        wall_t = time.time_ns()
        offset_samples.append(wall_t - perf_t)
    _TIME_OFFSET_NS = sum(offset_samples) // len(offset_samples)
    
    def get_abs_usec_timestamp():
        # 返回微秒级绝对Unix时间戳
        return (time.perf_counter_ns() + _TIME_OFFSET_NS) // 1000
    

    校准完成后后续调用不需要再读低分辨率的系统时钟,精度可以稳定维持在1微秒以内。

  • 绝对时间直读方案:time.time_ns()(Python 3.7+)
    如果不需要兼容Python 3.7以下版本,且不需要做短间隔的高精度差值计算,可以直接调用这个接口。它返回整数类型的纳秒级Unix时间戳,避免了time.time()的浮点数精度损失,Linux平台下原生分辨率就低于1微秒,Windows平台在Python 3.10+版本优化了时钟读取逻辑后,实测分辨率也能达到1~2微秒,基本满足要求:

    import time
    usec_abs_time = time.time_ns() // 1000
    
  • Python 3.7以下版本兼容方案
    低版本Python没有纳秒级标准接口,可以通过ctypes直接调用操作系统原生高精度时钟API:

    • Linux/macOS:调用clock_gettime,传入CLOCK_REALTIME获取绝对时间,传入CLOCK_MONOTONIC_RAW获取不受校时影响的高精度单调时间,返回的timespec结构自带纳秒精度
    • Windows:调用QueryPerformanceCounter和QueryPerformanceFrequency接口读取硬件性能计数器,分辨率可达亚微秒级,和高版本perf_counter的底层实现逻辑一致

避坑提示:不要使用datetime.datetime.now()获取高精度时间,它的底层实现依然依赖time.time(),精度和分辨率和后者没有区别,无法达到1微秒要求。

内容的提问来源于stack exchange,提问作者Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:12:31