首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中中断/中断time.sleep()

在python中中断/中断time.sleep()
EN

Stack Overflow用户
提问于 2011-02-25 14:26:01
回答 5查看 76.3K关注 0票数 75

我需要使用ctrl c来中断time.sleep()。

代码语言:javascript
复制
While 1:
    time.sleep(60)

在上面的代码中,当控件进入time.sleep函数时,python需要整整60秒来处理CTRL C

有什么优雅的方法可以做到这一点吗?这样,即使控件处于time.sleep函数中,我也可以中断

编辑

我是在一个遗留的实现上测试它的,它在windows2000上使用python2.2,这造成了所有的麻烦。如果我使用的是更高版本的python,CTRL就会中断sleep()。我通过在for循环中调用sleep(1)进行了一次快速修改。它暂时解决了我的问题

EN

回答 5

Stack Overflow用户

发布于 2011-02-25 14:47:56

当用户按下中断键Ctrl-C时,会引发KeyboardInterrupt异常。在python中,这是从SIGINT信号转换而来的。这意味着,您可以使用信号模块随心所欲地处理它:

代码语言:javascript
复制
import signal

def handler(signum, frame):
    print("do whatever, like call thread.interrupt_main()")

signal.signal(signal.SIGINT, handler)
print("Waiting for SIGINT...")
signal.pause()

这样,您就可以在收到键盘中断时做任何您想做的事情。

票数 8
EN

Stack Overflow用户

发布于 2011-02-25 15:08:57

我在Linux下用python2.5、2.6、3版本测试了你的代码,当按下CTRL-C时,所有代码都抛出了"KeyboardInterrupt“异常。

也许某个异常处理捕捉到了中断,或者您的问题是这样的:Why is KeyboardInterrupt not working in python?

票数 2
EN

Stack Overflow用户

发布于 2017-11-26 18:16:55

最优雅的解决方案当然是threading.Event,不过如果你只需要快速修改一下,下面的代码就能很好地工作:

代码语言:javascript
复制
import time

def main():
    print("It’s time !")

if __name__ == "__main__":
    print("press ctrl-c to stop")
    loop_forever = True
    while loop_forever:
        main()
        try:
            time.sleep(60)
        except KeyboardInterrupt:
            loop_forever = False
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5114292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档