【发布时间】:2017-10-02 01:08:24
【问题描述】:
继this 的帖子之后,我发现了在 Windows 7(企业版、64 位和 Python 3.4.4)下 Python 的 time.sleep() 函数的非功能性实现。
这是参考 .py 脚本:
import threading, time
def Return():
return
def Setup():
for _ in range(10):
time_before = time.time()
Return()
wait_delay = -time.time()
delays = []
InputFrequency = 60
while (time.time() - time_before) < (1 / InputFrequency):
time.sleep(0)
wait_delay += time.time()
delays.append(wait_delay)
print("Output frequency: " + str([1/t for t in delays][0]) + " Hz")
threading.Thread(target=Setup).start()
根据this 示例,此脚本应产生大约 60Hz 的输出频率。但是,当在我的 Windows 7 Enterprise 机器上运行时,这些是我在给定输入频率下收到的输出频率:
输入:10Hz - 输出:9.15Hz
输入:20Hz - 输出:16.03Hz
输入:30Hz - 输出 21.37Hz
输入范围:40Hz - 64Hz - 输出:32.05Hz
输入范围:65Hz - 10kHz+ - 输出:64.10Hz
这里发生了什么?为什么不同的输入频率(40Hz 以上)会产生相同的输出频率?为什么即使输入频率超过10,000Hz,输出频率上限也是64.10Hz?我不相信这是 ~60Hz 的 time.sleep() 分辨率问题。提供给 ideone.com 脚本的相同输入频率值会产生预期的输出频率,因此它必须与我的计算机相关。
【问题讨论】:
-
你检查过当前版本的python是否有什么不同吗?
-
我没有,但我刚刚检查了我的 Python 2.7.12 安装,它给出了相同的错误输出频率。
-
对,但是您的基线是 python 3,所以看来 python 3.6 可能是一个开始的地方。
-
我刚刚使用 Python 3.6.0 安装并尝试了该文件,并且遇到了相同的错误输出频率。
-
四处逛逛,我看到其他关于相对现代的 python 和操作系统的答案,睡眠大约是毫秒准确的,给予或接受。您是否考虑过选择某种数量的量来代替 sleep(0)?
标签: python python-3.x time sleep