有没有办法停止在Windows中sleep.sleep?

在* nix python信令允许我准备好之前停止睡眠。 有没有类似的机制在Windows中可用 – 似乎所有的方法最终只能在睡眠后拦截代码?

代码示例:

from time import sleep .. do something that will intercept the sleep try: sleep(60) finally: print 'how to get here under 60 seconds in windows?' 

对于windows没有答案的类似问题: 在python中打断/中断time.sleep()

Solutions Collecting From Web of "有没有办法停止在Windows中sleep.sleep?"

signal的Python文档说:

尽管就Python用户而言,Python信号处理程序是异步调用的,但它们只能在Python解释程序的“原子”指令之间进行。 这意味着在长时间计算过程中到达纯粹以C语言实现的信号(比如在大量文本上的正则表达式匹配)可能会被延迟一段任意的时间。

time说:

实际的中止时间可能会少于所要求的时间,因为任何捕捉到的信号都会在执行该信号的捕捉程序之后终止睡眠()。

在Windows上,显然time.sleep()并没有按照文档来实现,因为睡眠期间接收到的信号的处理程序在完成睡眠的整个持续时间之前不会被执行。 下面的例子:

 import signal, time def handler(signum, frame): print('Signal handler called with signal', signum) signal.signal(signal.SIGINT, handler) print("signal set, sleeping") time.sleep(10) print("sleep done") 

打印:

 signal set, sleeping Signal handler called with signal 2 sleep done 

第一行立即出现,第二行10秒后,无论中断何时发生。

正如Thomas K所建议的,更好的策略是使用线程和同步。

我不确定这是否会为你做,但是这里有一个你可以做的解决方法:

 for i in range(60): if checkIfIShouldInterruptSleep(): break time.sleep(1) print "Finished Sleeping!" 

这只是第二个准确的,但它可以为你的目的。 快乐的编码!