timer.sleep()
函数。
我注意到由于调度问题(请参阅timer.sleep
文档),timer.sleep()
函数会添加额外的延迟。因此,随着程序运行时间越长,计时器就会变得越不准确。
是否有更准确的计时器或解决此问题的方法来暂停程序?
如果您能提供任何帮助将不胜感激。谢谢!
timer.sleep()
函数。
我注意到由于调度问题(请参阅timer.sleep
文档),timer.sleep()
函数会添加额外的延迟。因此,随着程序运行时间越长,计时器就会变得越不准确。
是否有更准确的计时器或解决此问题的方法来暂停程序?
如果您能提供任何帮助将不胜感激。谢谢!
我曾经有一个类似上述解决方案的方法,但很快就变得非常占用处理器。这里提供一个占用处理器较高的想法和一个解决方法。
def processor_heavy_sleep(ms): # fine for ms, starts to work the computer hard in second range.
start = time.clock()
end = start + ms /1000.
while time.clock() < end:
continue
return start, time.clock()
def efficient_sleep(secs, expected_inaccuracy=0.5): # for longer times
start = time.clock()
end = secs + start
time.sleep(secs - expected_inaccuracy)
while time.clock() < end:
continue
return start, time.clock()
efficient_sleep(5, 0.5)
的输出结果为:
这是在Windows上的运行结果。我正在进行100次循环的测试,以下是测试结果:
睡眠时间保持准确,但调用总是有一点延迟。如果您需要精确每 xxx 秒调用到毫秒级别的调度程序,则需要另外考虑。
import time
import random
target = time.time()
def myticker():
# Sleep for 0.5s between tasks, with no creep
target += 0.5
now = time.time()
if target > now:
time.sleep(target - now)
def main():
previous = time.time()
for _ in range(100):
now = time.time()
print(now - previous)
previous = now
# simulate some work
time.sleep(random.random() / 10) # Always < tick frequency
# time.sleep(random.random()) # Not always < tick frequency
myticker()
if __name__ == "__main__":
main()
在 Linux 上工作却完全不了解 Windows,我可能有点天真,但是是否存在一些原因使你自己编写的 sleep 函数无法起作用?
类似于:
import time
def sleep_time():
start_time = time.time()
while (time.time() - start_time) < 0.0001:
continue
end_time = time.time() + 60 # run for a minute
cnt = 0
while time.time() < end_time:
cnt += 1
print('sleeping',cnt)
sleep_time()
print('Awake')
print("Slept ",cnt," Times")
timer.sleep
("程序运行时间越长,计时器的不准确性就越高")?如果是这样,你可以通过使用像time.clock_gettime
这样的方法跟踪实际时间来校正睡眠时间。 - cdarketime.time()
只提供1秒的分辨率。 - cdarke