在 *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() https://stackoverflow.com/questions/5114292/break-interrupt-a-time-sleep-in-python
Python 文档signal
says:
尽管Python信号处理程序是异步调用的
对于Python用户而言,它们只能发生在“原子”之间
Python 解释器的指令。这意味着信号
在纯粹用 C 实现的长计算期间到达(例如
正则表达式匹配大量文本)可能会延迟
任意时间量。
whereas time
says:
实际暂停时间可能会比要求的时间短,因为任何
捕获的信号将在执行该信号后终止 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")
prints:
signal set, sleeping
Signal handler called with signal 2
sleep done
第一行立即发生,第二行在 10 秒后发生,无论中断何时发生。
正如 Thomas K 所建议的,更好的策略是使用线程和同步。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)