以下程序挂起终端,使其忽略Ctrl C.这是相当烦人的,因为每次其中一个线程挂起时我必须重新启动终端.
有没有办法在等待事件时捕获KeyboardInterrupt?
import threading
def main():
finished_event = threading.Event()
startThread(finished_event)
finished_event.wait()#I want to stop the program here
print('done!')
def startThread(evt):
"""Start a thread that will trigger evt when it is done"""
#evt.set()
if __name__ == '__main__':
main()
最佳答案
更新:在当前的Python 3上,finished_event.wait()适用于我的Ubuntu机器(从Python 3.2开始).您不需要指定timeout参数,使用Ctrl C中断它.您需要在CPython 2上传递timeout参数.
这是一个完整的代码示例:
#!/usr/bin/env python3
import threading
def f(event):
while True:
pass
# never reached,otherwise event.set() would be here
event = threading.Event()
threading.Thread(target=f,args=[event],daemon=True).start()
try:
print('Press Ctrl+C to exit')
event.wait()
except KeyboardInterrupt:
print('got Ctrl+C')
可能有bugs与Ctrl+C相关.测试它是否适用于您的环境.
旧民意调查答案:
您可以尝试允许解释器运行主线程:
while not finished_event.wait(.1): # timeout in seconds
pass
如果您只想等到子线程完成:
while thread.is_alive():
thread.join(.1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。