Python3键盘中断多线程

Python3键盘中断多线程,python,python-3.x,python-multithreading,Python,Python 3.x,Python Multithreading,我试图让一个主线程等待它的工作线程完成使用下面的代码,但是当我试图用Ctrl+C中断它时,它并没有停止 import threading import sys exit = threading.Event() #pass it to the threads try: exit.wait() print('Goodbye') sys.exit() except KeyboardInterrupt: print('Interrupted') sys.exi

我试图让一个主线程等待它的工作线程完成使用下面的代码,但是当我试图用Ctrl+C中断它时,它并没有停止

import threading
import sys
exit = threading.Event()

#pass it to the threads

try:
    exit.wait()
    print('Goodbye')
    sys.exit()
except KeyboardInterrupt:
    print('Interrupted')
    sys.exit()
更新 没有指纹。所有后台线程都是守护进程

import threading
import sys
import time
exit = threading.Event()

#pass it to the threads

try:
    print("hi")
    time.sleep(20)
    print('Goodbye')
    sys.exit()
except KeyboardInterrupt:
    print('Interrupted')
    sys.exit()
请尝试上面的语句来测试您的代码。我已经测试过了,对我来说效果很好

当您使用exit.wait()而不给出任何超时时,它将运行无限秒。所以,请给我一些时间作为保证。 请遵循以下代码:

exit = threading.Event()

#pass it to the threads

try:
    print("hi")
    exit.wait(5)
    print('Goodbye')
    sys.exit()
except KeyboardInterrupt:
    print('Interrupted')
    sys.exit()

有一个格式化错误。你在哪个站台?在Linux或macOS上(除非您使用的是3.0-3.1,这基本上是坏的),我认为
线程
对象上的所有
等待
都应该可以通过信号中断,一旦中断,Python将立即将SIGINT处理为
键盘中断
。但是在Windows上…我不确定它是如何工作的,但是您可能需要更多的东西。另外,我假设主线程仍然被阻塞在
出口上。wait()
,并且还没有打印
再见'
,对吗?(因为在其他情况下,它已经离开了
try
/
块,所以
try
显然无法捕获异常。)守护进程线程是不是?
中断了吗
打印?我在Windows上。主线程仍然被阻塞。我所有的后台线程目前都是守护进程。我正在尝试让主线程无限期地等待,除非被中断,理想情况下不需要运行while循环来检查标志。这可能吗?如果使用循环,这是可能的。但是使用Wait()是不可能的。