在Windows中有没有办法停止time.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()
2 个回答
1
我不确定这个方法是否适合你,但这里有一个小技巧可以试试:
for i in range(60):
if checkIfIShouldInterruptSleep():
break
time.sleep(1)
print "Finished Sleeping!"
这个方法的精确度只到秒,但可能能满足你的需求。祝你编码愉快!
5
Python的文档中提到关于signal
的内容:
• 尽管从Python用户的角度来看,信号处理程序是异步调用的,但它们只能在Python解释器的“原子”指令之间发生。这意味着在进行一些长时间的计算(比如在大文本上进行正则表达式匹配)时,如果有信号到达,可能会被延迟很长时间。
而time
的说明是:
实际的暂停时间可能会比请求的时间短,因为任何捕获到的信号会在执行该信号的处理程序后终止
sleep()
。
在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所建议的,使用线程和同步机制会是一个更好的策略。