首页 > 解决方案 > 带有微秒计时器的时钟

问题描述

我正在尝试在 python 上创建一个微秒计时器。目标是每微秒都有一个“滴答”。

我目前的做法是:

us = list()
while len(us) <= 1000:
    t = time.time()*1000000
    if t.is_integer():
        us.append(t)

这表明在我不知道的时间方面存在明显的限制。

第 656 个值是1532960518213592.0. while 循环在“相同”微秒内执行。然后值跳到1532960518217613.0。最大分辨率似乎是 4021 us。

我怎样才能克服这些限制?

编辑:关于这个测量。

带有 youtube 视频的 Chrome 在后台运行。+ Outlooks、Teams、Adobe 和其他一些东西。CPU 是 i5-5200U CPU @ 2.20 GHz(2 核)。

标签: pythontime

解决方案


问题是当前时间是您的操作系统提供的功能,因此它在不同的系统上会有不同的行为,无论是在时钟精度方面还是在轮询频率方面。还要记住,您的程序可以被操作系统的调度程序暂停和恢复执行。

这是您的代码的简化版本:

[time.time() * 10**6 for i in range(1000)]

在我的本地计算机(Windows Ubuntu 子系统)上,这会产生以下内容(请注意,它大约是每秒一个,有间隙):

[1532961190053186.0, 1532961190053189.0, 1532961190053190.0, 1532961190053191.0, 1532961190053192.0, 1532961190053193.0, 1532961190053194.0, 1532961190053195.0, 1532961190053196.0, 1532961190053198.0, ...]

在服务器(Ubuntu)上,这会产生以下内容(注意同一时间发生多次):

[1532961559708196.0, 1532961559708198.0, 1532961559708199.0, 1532961559708199.0, 1532961559708199.0, 1532961559708200.0, 1532961559708200.0, 1532961559708200.0, 1532961559708200.0, 1532961559708201.0, ...]


推荐阅读