我正在尝试在python上创建一个微秒计时器。目标是每微秒“滴答”一声。
我目前的做法是:
class ProductIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(
document=True, use_template=True,
template_name='/home/<path>/search/indexes/product_text.txt'
)
title = indexes.CharField(model_attr='title')
slug = indexes.CharField(model_attr='slug')
featured = indexes.BooleanField(model_attr='featured')
它显示出我不知道的时间安排方面的明显限制。
前656个值为us = list()
while len(us) <= 1000:
t = time.time()*1000000
if t.is_integer():
us.append(t)
。 while循环在“相同”的微秒内执行。
然后,该值跳至1532960518213592.0
。最大分辨率似乎是4021 us。
如何克服这些限制?
编辑:关于此度量。
带有youtube视频的Chrome在后台运行。 + Outlook,团队,Adobe和其他一些东西。 CPU是2.20 GHz(2核)的i5-5200U CPU。
答案 0 :(得分:1)
问题在于,当前时间是您的操作系统提供的功能,因此在时钟的精度和轮询频率方面,它在不同的系统上都有不同的行为。另外请记住,您的程序可以由操作系统的调度程序暂停执行后的恢复。
这是您的代码的简化版本:
[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,...]