Python:如何让time.monotonic()返回6位小数的单调时间?
兼具单调特性与微秒级精度的时间方案
首先明确几个核心事实:
time.monotonic()的精度并非固定为3位小数,它的实际精度由操作系统底层时钟实现决定。比如在Linux/macOS环境下,它通常能达到微秒级(6位小数)精度,只是Python默认打印时仅显示3位小数。你可以通过格式化输出来查看完整精度:import time print("{0:.9f}".format(time.monotonic()))- 如果你的系统确实限制了
time.monotonic()的精度(比如部分老旧Windows环境),可以直接用time.monotonic_ns()来满足需求:
替代方案:用time.monotonic_ns()生成微秒级精度的单调时间
time.monotonic_ns()返回单调递增的纳秒级整数,将其除以1e9即可得到微秒级精度的浮点数(6位小数),同时完全保留单调特性,不受系统时钟回拨影响:
import time def get_monotonic_micro(): return time.monotonic_ns() / 1e9 # 示例使用 timestamp = get_monotonic_micro() print("{0:.6f}".format(timestamp)) # 输出带6位小数的单调时间
这个方案的优势:
- 完全保证时间单调递增,不会因NTP时钟调整、系统时间回拨等问题出现顺序混乱
- 原生支持纳秒级精度,转换后轻松保留微秒级的显示精度
- 跨平台兼容,Python 3.7及以上版本均可使用
为什么不继续用time.time()?
time.time()虽有微秒级精度,但它依赖系统实时时钟,当系统时钟被NTP服务调整(比如回拨校准)时,可能出现时间倒退的情况,这会直接破坏你依赖的时间单调特性,导致队列中的时间顺序混乱,因此不适合你的场景。
内容的提问来源于stack exchange,提问作者Zercon
相关产品推荐
相关产品推荐

