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()