Python time.sleep和suspend(即待机和休眠)
例如,如果我执行time.sleep(100)并立即将计算机休眠99秒,那么下一条语句将在醒来后的1秒或100秒内执行吗Python time.sleep和suspend(即待机和休眠),python,Python,例如,如果我执行time.sleep(100)并立即将计算机休眠99秒,那么下一条语句将在醒来后的1秒或100秒内执行吗 如果答案是1秒,那么不管休眠/待机的时间长短,您如何“睡眠”100秒?显然,您必须根据实际经过的时间进行睡眠 另一种选择(根据“不知何故”启动和停止的其他时钟睡觉)将难以管理。您的应用程序(正在休眠)将如何收到所有这些启动和停止活动的通知?对,它必须被唤醒,被告知它不应该运行,因为系统正在休眠 或者,也许可以使用一些超级复杂的操作系统级调度器来确定系统“繁忙”与“休眠”的时间
如果答案是1秒,那么不管休眠/待机的时间长短,您如何“睡眠”100秒?显然,您必须根据实际经过的时间进行睡眠 另一种选择(根据“不知何故”启动和停止的其他时钟睡觉)将难以管理。您的应用程序(正在休眠)将如何收到所有这些启动和停止活动的通知?对,它必须被唤醒,被告知它不应该运行,因为系统正在休眠 或者,也许可以使用一些超级复杂的操作系统级调度器来确定系统“繁忙”与“休眠”的时间是否与各种休眠进程的时间表相比较 太复杂了 实际上,如果仔细检查,睡眠是非常近似的,任何Unix信号都会中断睡眠。所以早起有很多原因。Control-C就是一个很好的例子。
时间。睡眠(N)
尝试睡眠至少N秒,也就是“挂钟”时间-当然不能保证睡眠将持续N秒;例如,线程在那个时候准备好再次执行,但它不一定会抢占其他线程在那个时候执行的任何线程——这是操作系统的决定,而不是任何编程语言的决定;另一方面,睡眠可能会被各种各样的事件(如中断)过早中断
如果你能在你的操作系统上找到一些类似时钟的东西,只有当系统的状态是你所关心的(例如,在你的情况下是“不hybernated”)时才会出现,那么如果你再次“太早”醒来,你当然可以回到睡眠状态
例如,在Windows 7上,专门记录了“不包括系统在睡眠或休眠中花费的时间”,并使用100纳秒的单位。因此,如果您调用它,例如通过ctypes
,可以实现您想要的效果:
def unbiasedsleep(n):
start = kernel32.QueryUnbiasedInterruptTime()
target = start + n * 10 * 1000 * 1000
while True:
timeleft = target - kernel32.QueryUnbiasedInterruptTime()
if timeleft > 0:
time.sleep(timeleft / (10 * 1000 * 1000.0))
我不知道如何在其他版本的Windows或其他操作系统上获得与QueryUnbiasedInterruptTime相当的查询时间,但是,您没有告诉我们您感兴趣的操作系统,因此,提出一长串在不同环境下可能同样有效的方法是毫无意义的。我不知道你到底想实现什么,但是
for i in range(100):sleep(1)
可能会起作用,因为冬眠只需要1秒钟的睡眠时间