当我按下Ctrl-C时,以下代码立即终止。在
但是,似乎循环应该在10秒延迟后退出-因为在到达循环的顶部之前,它不会检查keep_going
的状态。为什么要立即退出循环?在
如何确保循环在退出之前完成执行?在
import signal
import time
keep_going = True
def signal_handler(signal, frame):
global keep_going
print 'quitting!'
keep_going = False
signal.signal(signal.SIGINT, signal_handler)
while keep_going:
print 'looping...'
time.sleep(10)
print 'bye!'
来自Python docs:
也就是说,循环确实完成了它的执行(从信号处理程序的
"quitting!"
之后输出的"bye"
)可以看出,只有sleep
被截断了。在如果你有比
sleep
更重要的东西,我相信你会看到你最初想要的。在信号中断休眠调用,继续循环,条件为False,因此终止循环。Python不恢复睡眠调用。在
顺便说一句,Python解释器通常会捕捉SIGINT本身,并将其转换为一个键盘中断异常,您可以捕捉该异常,而不是使用信号模块。在
相关问题 更多 >
编程相关推荐