Ctrl+c 不停止 Windows + python3.7 中的线程
Ctrl+c not stopping a Thread in Windows + python3.7
我正在尝试这个带有 while 循环的简单线程。当我在 while 循环内时,Ctrl+C 无法停止我的程序。一旦我在 while 循环之后去做其他事情,脚本就会按预期停止。我该怎么做才能在 while 循环中和之后优雅地杀死我的脚本? (编辑:这似乎是Windows独有的问题,iOS和Ubuntu似乎如我所愿)
import time, threading
class MainClass(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
while True:
time.sleep(1)
print("Looping")
# Script entry point
if __name__ == '__main__':
a = MainClass()
a.daemon = True
a.start()
a.join()
这是一个已知问题,在 Issue 35935 中有解释。
解决它的一种方法是使用 signal.signal(signal.SIGINT, signal.SIG_DFL)
恢复 SIGINT 的默认内核行为(问题 OP 指出的解决方案)。至于为什么会这样,超出了我的知识范围。
这适用于 Windows 使用 Python 3.8+。
实施:
import time, threading
import signal
class MainClass(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
while True:
time.sleep(1)
print("Looping")
# Script entry point
if __name__ == '__main__':
a = MainClass()
a.daemon=True
signal.signal(signal.SIGINT, signal.SIG_DFL)
a.start()
a.join()
我正在尝试这个带有 while 循环的简单线程。当我在 while 循环内时,Ctrl+C 无法停止我的程序。一旦我在 while 循环之后去做其他事情,脚本就会按预期停止。我该怎么做才能在 while 循环中和之后优雅地杀死我的脚本? (编辑:这似乎是Windows独有的问题,iOS和Ubuntu似乎如我所愿)
import time, threading
class MainClass(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
while True:
time.sleep(1)
print("Looping")
# Script entry point
if __name__ == '__main__':
a = MainClass()
a.daemon = True
a.start()
a.join()
这是一个已知问题,在 Issue 35935 中有解释。
解决它的一种方法是使用 signal.signal(signal.SIGINT, signal.SIG_DFL)
恢复 SIGINT 的默认内核行为(问题 OP 指出的解决方案)。至于为什么会这样,超出了我的知识范围。
这适用于 Windows 使用 Python 3.8+。
实施:
import time, threading
import signal
class MainClass(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
while True:
time.sleep(1)
print("Looping")
# Script entry point
if __name__ == '__main__':
a = MainClass()
a.daemon=True
signal.signal(signal.SIGINT, signal.SIG_DFL)
a.start()
a.join()