使用time.sleep()指定线程休眠的时间是否有上限?我一直遇到长时间睡眠(即超过1k秒)的问题。这个问题出现在Windows和Unix平台上。
答案 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]。
答案 4 :(得分:1)
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:睡眠长度太大