【发布时间】:2015-06-03 23:27:28
【问题描述】:
我正在使用 wxpython 和 python 的线程模块来构建一个带有 GUI 的简单计时器。我使用 time.slee(0.5) 来测量时间。问题是:一旦我启动计时器并切换到 chrome 等其他程序。几次之后,当我切换回来时,我的计时器上显示的时间非常不准确。例如,如果我设置 3 分钟运行,结果我的计时器比操作系统时钟慢 3 倍。
经过搜索,我知道 time.sleep() 是不可靠的,但似乎差距如此之大,让我怀疑是否有问题。
我还注意到,如果我不把脚本放到后台,那么只有 2-3 秒的差异。
我可以接受几秒的差异,但不能接受 2“分钟”。我该如何解决?
【问题讨论】:
-
您可能会发现检查当前时间并将其与预定时间进行比较可能更准确。
-
如果 Sleep() 时间不可靠,那么您的盒子严重超载或您的设计非常糟糕:(
-
因为大多数现代桌面/服务器操作系统都有抢先调度程序,您会发现
time.sleep()不能保证非常准确;尤其是与系统上的其他竞争资源。 -
为避免漂移,请将睡眠与系统时钟同步。您可能应该使用特定于 GUI 的计时器,例如
widget.after()in tkinter orGObject.timeout_add()in Gtk。见code examples in the links。
标签: python multithreading timer