使用time.sleep()指定线程休眠的时间是否有上限?我一直遇到长时间睡眠(即超过1k秒)的问题。这个问题出现在Windows和Unix平台上。
我想situation described in the docs越有可能的时间越长:
实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止
sleep()
。此外,由于系统中的其他活动的安排,暂停时间可能比任意量请求的时间长。
其他人已经解释了为什么你可能睡得比你要求的少,但没有告诉你如何处理这个问题。如果你需要确保你至少睡了n秒钟,你可以使用如下代码:
from time import time, sleep
def trusty_sleep(n):
start = time()
while (time() - start < n):
sleep(n - (time() - start))
这可能比n睡得多,但在最后n秒睡觉前它永远不会恢复。
规范说:
暂停执行给定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()。此外,由于系统中的其他活动的安排,暂停时间可能比任意量请求的时间长。
这里没有时间限制。当然1K秒并不多,应该没有问题。
根据文档,time.sleep接受任何非零数字[1],你可能知道。但是,您也受到操作系统调度程序的影响[1]。
您可以通过将短暂延迟的睡眠放入循环来防止可能出现的问题:
def sleep(n):
for i in xrange(n):
time.sleep(1)
实际答案,至少对我的机器来说:4294967.2950000003911900999 ......秒。
sleep(4294967.2950000003911901)
OverflowError:睡眠长度太大