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

mko*_*ela 6 python windows

在*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?'
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ave 5

的 Python 文档signal说:

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

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")
Run Code Online (Sandbox Code Playgroud)

印刷:

signal set, sleeping
Signal handler called with signal 2
sleep done
Run Code Online (Sandbox Code Playgroud)

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

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