【发布时间】:2016-07-20 17:31:38
【问题描述】:
在这个论坛上,我得到了一些关于如何在 Python 2 中编写时钟对象的非常好的提示。我现在有一些代码可以工作。这是一个以 60 FPS“滴答作响”的时钟:
import sys
import time
class Clock(object):
def __init__(self):
self.init_os()
self.fps = 60.0
self._tick = 1.0 / self.fps
print "TICK", self._tick
self.check_min_sleep()
self.t = self.timestamp()
def init_os(self):
if sys.platform == "win32":
self.timestamp = time.clock
self.wait = time.sleep
def timeit(self, f, args):
t1 = self.timestamp()
f(*args)
t2 = self.timestamp()
return t2 - t1
def check_min_sleep(self):
"""checks the min sleep time on the system"""
runs = 1000
times = [self.timeit(self.wait, (0.001, )) for n in xrange(runs)]
average = sum(times) / runs
print "average min sleep time:", round(average, 6)
sort = sorted(times)
print "fastest, slowest", sort[0], sort[-1]
def tick(self):
next_tick = self.t + self._tick
t = self.timestamp()
while t < next_tick:
t = self.timestamp()
self.t = t
if __name__ == "__main__":
clock = Clock()
时钟不会太糟糕,但为了避免繁忙的循环,我希望 Windows 的睡眠时间少于通常的 15 毫秒。在我的系统(64 位 Windows 10)上,如果 Python 是唯一正在运行的应用程序,它会在启动时钟时平均返回大约 15 / 16 毫秒。这对于一分钟的睡眠来说太长了,无法避免繁忙的循环。
有人知道我怎样才能让 Windows 的睡眠时间低于该值吗?
【问题讨论】:
-
认真的吗?您希望睡眠时间少于 0.015 微秒?在 15 纳秒内? 60 FPS 是每 秒 60 帧,而不是每微秒帧。
-
抱歉修复了...
-
您可以将其降低到允许的最小计时器周期,大约为 1 毫秒(通过
winmm!timeGetDevCaps查询)。这够好吗? -
这听起来很不错,但是如何在 Python 2 中使用它呢?
标签: python windows time sleep clock