在*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()
的 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 所建议的,更好的策略是使用线程和同步。