python:在不繁忙的循环中以不同的精确时间运行任务

时间:2017-02-06 23:56:17

标签: python timing

输入:相对于程序启动的浮点时间值数组(以秒为单位)。 [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。

1 个答案:

答案 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的垃圾收集和内存管理如果你想要'实时'事件。