python - 带有微秒计时器的时钟
问题描述
我正在尝试在 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 核)。
解决方案
问题是当前时间是您的操作系统提供的功能,因此它在不同的系统上会有不同的行为,无论是在时钟精度方面还是在轮询频率方面。还要记住,您的程序可以被操作系统的调度程序暂停和恢复执行。
这是您的代码的简化版本:
[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, ...]
推荐阅读
- filter - 刷新页面时带有过滤器的Angular 6 queryParamMap不起作用
- java - 寻找 docusign 的基本结构
- apache-spark - spark结构化流异常:不支持不带水印的附加输出模式
- python-3.x - UnpicklingError: 无效的加载键,'\x0a'
- node.js - 使用节点缓存模块不在 AWS lambda 中缓存数据
- databricks - 如何在 Databricks Python Notebook 中运行/执行输入单元
- java - Spring集成测试消耗大量内存,在GradleWorkerMain中使用大量重复线程
- excel - 用户窗体打开后如何执行代码?
- ios - 为什么在失败的 if 语句之后不会出现警报?
- javascript - React Page 在访问组件状态时不断崩溃