time.sleep()和迭代到秒之间的差异



我想知道time.sleep(5)和以下代码之间的区别是什么:

import time
start_time = time.time()
while True:
if time.time() - start_time > 5:
break
print("Five seconds passed")

此外,使用第一种解决方案还是第二种解决方案更好?像我一样使用while循环可能不是一个好的解决方案。

谢谢你的建议。

while True循环被称为Busy Wait[Wikipedia],因为它将使处理器保持运行。这可能会使1个核心保持在100%。

time.sleep()是空闲等待,因为处理器没有任何事情可做。如果没有其他东西使用,您的CPU将处于0%。

现在,如果你想完全理解它,事情会变得困难,这可能取决于操作系统。

  • 如果不更改,Windows中的线程调度将在1/64s发生。无论你的程序做什么,它的精度都可能是1/64s,因为这是Windows唤醒线程的时间间隔。

  • 保持CPU繁忙将保持线程优先级不变甚至更低。

  • 让CPU保持忙碌会让它暖和起来。CPU不喜欢加热,它们实际上可能会减慢或至少停止TurboBoost(或类似的CPU功能(

  • 保持CPU空闲将增加线程优先级。它将使用一个同步对象并调用WaitForSingleObject(([MSDN],从而将CPU返回给操作系统。

实际会发生什么,或者哪种方法更精确,都很难预测。要完全了解Windows上会发生什么,请阅读《Windows内部》一书[亚马逊]关于进程和线程的第1部分。

最新更新