【问题标题】:What does time.sleep(10) in python do during daylight savings time?python 中的 time.sleep(10) 在夏令时做什么?
【发布时间】:2017-05-16 02:34:07
【问题描述】:

如果在将时间提前一小时之前 5 秒,time.sleep(10) 会休眠 10 秒还是 5 秒? (五秒后,距离开始时间超过十秒)。

如果在将时间向后设置一小时之前是 5 秒,time.sleep(10) 睡眠十秒,还是一小时十秒? (当前时间距离开始时间超过十秒需要额外的一个小时,至少按时钟)

为了完整起见,睡眠对于闰秒有什么作用,就像我们刚才所做的那样?

是否有任何时候 time.sleep 不会按要求执行?

我还在使用 python 2.7。

【问题讨论】:

  • 它是一个持续时间。它与实际时间无关。
  • 任何在 DST 或闰秒期间中断的睡眠功能都会被严重破坏。对于像 Python 这样流行的语言,如果它有这个 bug,那么没人会注意到它是极不可能的。
  • 它基本上屏住呼吸 10 秒。它不会将您传送到特定时间

标签: python python-2.7 dst


【解决方案1】:

正如time.sleep() document 所说:

在给定的秒数内暂停当前线程的执行。

time.sleep() 与时区或您的系统时间无关。在调用当前线程时,它会在指定的秒数内暂停执行当前线程。

回答您的问题“是否有任何时候time.sleep 不会按要求执行?” 也可在document 中找到:

实际的挂起时间可能少于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止 sleep()。

但这在version 3.5 中发生了变化,即使睡眠被信号中断,函数也会睡眠至少秒,除非信号处理程序引发异常(请参阅PEP 475理由)。

注意:由于系统中其他活动的调度,暂停时间可能比请求的长任意量

【讨论】:

    【解决方案2】:

    time.sleep(10) 不看“墙上时间”;它在“CPU时间”中计为10秒。 (这里有关于这个准确性的讨论:How accurate is python's time.sleep()?

    【讨论】:

      【解决方案3】:

      大多数计算机以秒或毫秒为单位跟踪时间,因为“纪元”通常是 1970 年 1 月 1 日 UTC。

      将时区设置为 UTC 以外的时间实际上不会更改系统时钟。系统时钟继续以 UTC 运行。相反,计算机只是记住您(用户)希望查看某个特定时区的时间,并在需要时将 UTC 系统时间转换为您的首选时区。

      因此,睡眠功能不会受到夏令时更改影响的原因是计算机计算相对于系统时钟的唤醒时间,系统时钟始终为​​ UTC。

      【讨论】:

        猜你喜欢
        • 2011-02-22
        • 2010-10-10
        • 2015-04-14
        • 2015-12-04
        • 2010-10-12
        • 2021-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多