【问题标题】:How accurate is python's time.sleep() for long time periods?python 的 time.sleep() 在很长一段时间内有多准确?
【发布时间】:2020-06-29 19:26:24
【问题描述】:

我想知道 python 的 time.sleep() 方法对于从几分钟到几天的较长时间段有多准确。

我担心的是,如果长时间使用此方法,可能会出现偏差。

另外,我想出了一个不同的解决方案,在经过一定时间后结束循环:

end = time.time() + 10000

while 1:
    if time.time() > end:
        break

这精确到几毫秒,这对我的用例来说很好,不会随着时间的推移而漂移。

【问题讨论】:

  • 您在执行此操作时是否检查了 CPU 的温度?
  • 这只是摘录来展示我的想法。无需通过添加不必要的语句使其阅读变得更复杂
  • 计算 sleep() 和睡眠所需的确切时间,这也将在几毫秒内准确(系统中断和预定事件可能会阻止 100% 的准确性) - 如果您每次都这样做sleep() 你不会漂移很多 - 你的电费,你的 CPU 和你的邻居(风扇声音很大)会感谢你。您的代码相当于每隔半秒看一次手表 7 小时,而不是将闹钟设置为现在加上 7 小时并睡觉直到闹钟响起。

标签: python python-3.x time


【解决方案1】:

Python 的time.sleep() 函数是准确的,应该在这种情况下使用,因为它更简单,更容易运行。一个例子是

time.sleep(10000) # will stop all running scripts in the same pid

使用没有任何阈值的裸 while 语句会占用大量资源,这就是为什么应该使用 time.sleep 表达式来减少这种情况。您还应该使用 while 语句条件语句,因为这将确保您的 while 语句关闭。

如下图

end = time.time() + 10000

while end > time.time(): # ensures to end when time.time (now) is more than end
    time.sleep(0.001) # creates a 1 ms gap to decrease cpu usage

【讨论】:

    【解决方案2】:

    我建议使用暂停模块,您可以在几天内获得毫秒精度。无需在这里自己动手。

    https://github.com/jgillick/python-pause

    【讨论】:

      【解决方案3】:

      Python 的 time.sleep() 在任何时间长度上都是准确的,但有两个小缺陷:

      1. 时间t 必须被视为“至少t 秒”,因为可能有一个
        计划在精确时刻开始的系统事件数 "开始时间" + t.
      2. 如果信号处理程序引发异常,睡眠可能会被中断。

      我认为,但不确定,这些缺陷存在于大多数编程语言中。

      【讨论】:

        猜你喜欢
        • 2010-11-11
        • 1970-01-01
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 2020-08-11
        相关资源
        最近更新 更多