gpt4 book ai didi

windows - 为什么 time.sleep() 在 Windows 中这么慢?

转载 作者:可可西里 更新时间:2023-11-01 10:03:55 25 4
gpt4 key购买 nike

我循环 1000 次,延时 1 毫秒,并计算总时间。非常有趣的是,总时间是 15.6 秒而不是 1 秒。当我打开 Google Chrome 浏览一些网站时,它正确运行了 1 秒。此外,它在 Macbook 上也运行良好。我想知道我需要采取什么样的解决方案来解决这个问题?请尝试在不打开 Chrome 的情况下运行它,然后在打开 Chrome 的情况下再次运行它以查看差异。当在我的系统上打开 Quora 或 Reddit 或 Stackoverflow 时它运行正常。

from timeit import default_timer as timer
import time
start = timer()
for i in range(1000):
time.sleep(0.001)

end = timer()
print ("Total time: ", end - start)

编辑:我没有在 Python 上运行它。我只是打开 Chrome 并浏览了一些网站以加快时间延迟。

更新:这是关于 Windows 的定时器分辨率。所以基本上,Chrome 将计时器分辨率从 15.6 毫秒更改为 1 毫秒。这篇文章解释的很好:https://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/

最佳答案

我终于明白了。非常感谢您的评论。这些给了我解决它的提示。为了解释为什么会发生这种情况,Windows 操作系统将其默认计时器分辨率设置为 15.625 毫秒或 64 Hz,这对于大多数应用程序来说已经足够了。但是,对于需要非常短的采样率或时间延迟的应用,15.625 ms 是不够的。因此,当我自己运行我的程序时,它停留在 15.6 s 1000 点。但是,当打开 Chrome 时,更高分辨率的计时器被触发并更改为 1 毫秒而不是 15.6,这导致我的程序按预期运行。

因此,为了解决这个问题,我需要调用一个名为timeBeginPeriod(period)的Windows函数来更改分辨率计时器。幸运的是,python 通过提供 ctypes 库让我很容易修复它。最终代码如下:

from time import perf_counter as timer
import time
from ctypes import windll #new

timeBeginPeriod = windll.winmm.timeBeginPeriod #new
timeBeginPeriod(1) #new

start = timer()
for i in range(1000):
print (i)
time.sleep(0.001)

end = timer()
print ("Total time: ", end - start)

警告:我读到过这种高定时器分辨率将如何影响整体性能以及电池。我还没有看到任何事情发生,Windows 任务管理器上事件的 CPU 使用率似乎也没有太大。但如果您的应用程序碰巧导致一些奇怪的行为,请记住这一点。

关于windows - 为什么 time.sleep() 在 Windows 中这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40594587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com