Python time.sleep()的上限?

时间:2009-12-21 16:39:12

标签: python time limit sleep

使用time.sleep()指定线程休眠的时间是否有上限?我一直遇到长时间睡眠(即超过1k秒)的问题。这个问题出现在Windows和Unix平台上。

7 个答案:

答案 0 :(得分:8)

其他人已经解释了为什么你的睡眠时间比你要求的少,但没有告诉你如何处理这个问题。如果你需要确保你至少睡了n秒钟,你可以使用如下代码:

from time import time, sleep
def trusty_sleep(n):
    start = time()
    while (time() - start < n):
        sleep(n - (time() - start))

这可能比n睡得多,但在睡至少n秒之前它永远不会恢复。

答案 1 :(得分:5)

我认为时间越长越可能situation described in the docs

  

实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()。此外,由于系统中其他活动的安排,暂停时间可能比任意数量的请求时间长。

答案 2 :(得分:1)

规范说:

  

暂停给定号码的执行   几秒钟争论可能是一个   浮点数表示a   更准确的睡眠时间。实际上   暂停时间可能会少于此   请求,因为任何捕获信号   将终止sleep()跟随   执行该信号的捕获   常规。此外,暂停时间可以   超过要求的时间   任意数量因为   安排其他活动   系统

这里没有时间限制。当然1K秒并不多,应该没有问题。

答案 3 :(得分:1)

根据文档,time.sleep接受任何非零数字[1],你可能知道。但是,您受操作系统调度程序的影响[1]。

[1] http://docs.python.org/library/time.html

答案 4 :(得分:1)

This changed in version 3.5

time.sleep(*secs*):现在,该功能至少睡眠 ,即使 睡眠被信号中断,除非信号处理程序引发 例外(有关理由,请参见PEP 475

答案 5 :(得分:0)

您可以通过将短暂延迟的睡眠放入循环来防止可能出现的问题:

def sleep(n):
    for i in xrange(n):
        time.sleep(1)

答案 6 :(得分:-1)

实际答案,至少对我的机器来说: 4294967.2950000003911900999 ......秒。

sleep(4294967.2950000003911901)

OverflowError:睡眠长度太大