如何让python实时睡眠?

如何让python实时睡眠?,python,sleep,Python,Sleep,我有如下代码: while True: do things over the internet: time.sleep(3600) 我想运行time.sleep(),即使我的计算机处于睡眠状态或未登录。例如,如果我启动程序,等待半小时,注销(或让机器进入睡眠状态),一小时后再回来,我希望它再次运行,并进入下一个等待周期半小时。您可以让它节省时间,并每隔一分钟左右检查一次,例如(伪代码) 是一小时前的可能需要datetime模块,但在编写之后,这是一个相对简单的逻辑(如果现在减去

我有如下代码:

while True:
    do things over the internet:
    time.sleep(3600)

我想运行
time.sleep()
,即使我的计算机处于睡眠状态或未登录。例如,如果我启动程序,等待半小时,注销(或让机器进入睡眠状态),一小时后再回来,我希望它再次运行,并进入下一个等待周期半小时。

您可以让它节省时间,并每隔一分钟左右检查一次,例如(伪代码)

是一小时前的
可能需要datetime模块,但在编写之后,这是一个相对简单的逻辑(如果现在减去一小时,则返回True>=lastDone else False),您需要查看python的
datetime
模块。或时间的
时钟


值得注意的是,解释器不能在您的计算机睡眠时运行,但它会在您打开它后立即运行,而且除此之外,解释器在睡眠时也会准确无误。

您可以让解释器节省时间,并每隔一分钟左右检查一次,例如(伪代码)

是一小时前的
可能需要datetime模块,但在编写之后,这是一个相对简单的逻辑(如果现在减去一小时,则返回True>=lastDone else False),您需要查看python的
datetime
模块。或时间的
时钟


值得注意的是,解释器不能在您的计算机睡眠时运行,但它会在您打开解释器后立即运行,而且除此之外,解释器在睡眠过程中也会准确无误。

您应该看到,但有可能在您的计算机进入睡眠状态时。sleep()会中断

当其他事情发生时,比如键盘中断,它就会中断

因此,将sleep()放入try语句中,并使用time.clock()或time.time()查看sleep()中断和下一次循环继续发生之间经过了多长时间才能继续睡眠,或者只使用以下命令使其中断:

try: time.sleep(360)
except: pass
因此,程序应该继续运行,不会出现任何错误

但是,如果没有那么容易,您将不得不使用信号和/或服务管理让操作系统通知您的进程它应该继续运行或启动休眠过程(在注销的意义上休眠,而不是循环的实际休眠)

请看,当操作系统想要注销、关闭或进入睡眠状态时,它将以某种事件、信号或服务暂停的形式发送通知。 Sleep有点特殊,但并非所有操作系统都是如此

你必须抓住这个,并用它做一些有用的事情

通过信号模块管理的信号

事件是特定于系统的,并且可能很复杂。在MacOSX上,它可以是AppScript或事件队列上的高级事件,也可以是使事情复杂化的MacPort消息,但API已经存在,不用担心

在Windows上,您可能必须使用win32types winservice模块来创建有用的服务管理

请注意,当操作系统关闭或注销时,它会向进程发送信号。若进程并没有响应并退出,它通常会询问用户是否应该退出,或者干脆终止进程

因此,您必须相应地注册您的进程,使其不会终止,即它必须是一个服务或守护进程

为了解决从睡眠模式返回的问题,最好使用threading.Timer()来完成工作

它是一个线程,将在指定时间后调用您注册的函数

在启动之前,您将其模式更改为daemon,并离开主循环以捕获事件、信号或其他内容

当时间过去时,您的函数将运行。然后,您可以通知主循环停止其他处理并完成您的工作

如果循环检测到从睡眠或登录返回,它可以直接调用函数并重新启动计时器

当你掌握了一切,这很容易,别担心。有很多书要读D

可能还有很多其他的解决方案


比如在登录时自动启动一些小流程,告诉您的流程它应该做些什么等等。现在一切都取决于您的创造力。

您应该看到,但当您的机器进入睡眠状态时,.sleep()可能会中断

当其他事情发生时,比如键盘中断,它就会中断

因此,将sleep()放入try语句中,并使用time.clock()或time.time()查看sleep()中断和下一次循环继续发生之间经过了多长时间才能继续睡眠,或者只使用以下命令使其中断:

try: time.sleep(360)
except: pass
因此,程序应该继续运行,不会出现任何错误

但是,如果没有那么容易,您将不得不使用信号和/或服务管理让操作系统通知您的进程它应该继续运行或启动休眠过程(在注销的意义上休眠,而不是循环的实际休眠)

请看,当操作系统想要注销、关闭或进入睡眠状态时,它将以某种事件、信号或服务暂停的形式发送通知。 Sleep有点特殊,但并非所有操作系统都是如此

你必须抓住这个,并用它做一些有用的事情

通过信号模块管理的信号

事件是特定于系统的,并且可能很复杂。在MacOSX上,它可以是AppScript或事件队列上的高级事件,也可以是使事情复杂化的MacPort消息,但API已经存在,不用担心

在Windows上,您可能必须使用win32types winservice模块来创建有用的服务管理

请注意,当操作系统关闭或注销时,它会向进程发送信号。若进程并没有响应并退出,它通常会询问用户是否应该退出,或者干脆终止进程

因此,您必须相应地注册您的进程,使其不会终止,即它必须是一个服务或守护进程

为了解决从睡眠模式返回的问题,最好使用threading.Timer()来完成工作

它是一个线程,将在指定时间后调用您注册的函数

您将其模式更改为daemon befo