输入:相对于程序启动的浮点时间值数组(以秒为单位)。 [0.452,0.963,1.286,2.003,......]。它们不是均匀分开的。
所需输出:在那些时间将文本输出到控制台(即打印'#')
我的问题是,最好的设计原则是什么。以下是我使用time.time的天真解决方案。
times = [0.452, 0.963, 1.286, 2.003]
start_time = time.time()
for event_time in times:
while 1:
if time.time() - start_time >= event_time:
print '#'
break
使用繁忙的循环(即使它在自己的线程中),上述感觉直觉错误。
我倾向于安排,但想确保没有更好的设计方案:Executing periodic actions in Python
还有计时器对象:timers
编辑:事件只需要10ms的精度,因此距离确切的事件时间为+/- 10ms。
答案 0 :(得分:0)
比忙碌等待更好的模式可能是使用time.sleep()。这会暂停执行而不是使用CPU。
time_diffs = [0.452, 0.511, 0.323, 0.716]
for diff in time_diffs:
time.sleep(diff)
print '#'
线程也可以用于类似的效果。但是,这两种解决方案仅在每次程序重新启动时要执行的操作时才有效。花费的时间可以忽略不计(也许不适用于印刷)。
据说如果你的精确度达到10ms并想在标准操作系统上使用Python,那么任何模式都不会起作用。我在Real time operating via Python上推荐这个问题,它解释了GUI事件(即打印到屏幕)对于这种精确度来说太慢而且不可靠,因为运行Python的典型操作系统并不能保证精确度和Python的垃圾收集和内存管理如果你想要'实时'事件。