time.sleep和suspend(即待机和休眠)

Leo*_*nth 2 python

例如,如果我执行time.sleep(100)并立即将我的计算机休眠99秒,那么下一个语句是在唤醒后的1秒或100秒内执行的吗?

如果答案是1秒,那么无论休眠/待机的长度如何,你如何"休眠"100秒?

Ale*_*lli 5

time.sleep(N)尝试入睡至少经过的,AKA"挂钟"的时间N秒-当然可以存在不保证睡眠将持续恰好 N秒; 例如,线程随时准备好再次执行,但它不一定能抢占当时正在执行的其他任何线程 - 这是操作系统做出的决定,而不是任何编程语言; 另一方面,睡眠可能会被各种事件(例如中断)过早地中断.

如果你可以在你的操作系统上找到一些类似时钟的东西,只有当系统的状态是你关心的状态时才会进展(例如"在你的情况下不是hybernated"),那么当然你可以回去睡觉再次"太早".

例如,在Windows 7上,QueryUnbiasedInterruptTime具体记录为"不包括系统在睡眠或休眠状态下花费的时间"并使用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))
Run Code Online (Sandbox Code Playgroud)

我不知道如何在其他版本的Windows或其他操作系统上获得相当于QueryUnbiasedInterruptTime的功能,但是,您不会告诉我们您感兴趣的操作系统,所以无论如何它都是毫无意义的提出可以在不同环境中类似地工作的方法的长洗衣清单.