无法在Windows上使用键盘Ctrl + C中断线程化的Python控制台应用程序

时间:2018-05-08 16:19:04

标签: python windows exception signals

我无法在Windows上使用 Ctrl + C 中断我的线程Python生产应用程序,它继续运行,尝试了异常和信号处理。这是非常简化的代码版本,不会中断。单线程应用程序终止正常,与多线程Linux版本相同。有人可以帮忙解决这个问题吗?提前谢谢。

import threading
import time

class FooThread(threading.Thread):
    stop_flag = False

    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        while not self.stop_flag:
            print(1)
            time.sleep(1)

t = FooThread()
t.start()

try:
    t.join()
except KeyboardInterrupt:
    t.stop_flag = True
    t.join()

1 个答案:

答案 0 :(得分:2)

你让你的线程成为一个守护进程,但你还需要保持你的#34; main"线程处于活动状态以侦听信号或键盘中断

带信号的简单工作实现:

import threading
import time
import sys
import signal

class FooThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        while not self.stop_flag:
            print(1)
            time.sleep(1)

    stop_flag = False

def main():
    t = FooThread()
    def signal_handler(signal, frame):
        print('You pressed Ctrl+C!')
        t.stop_flag = True
        t.join()

    signal.signal(signal.SIGINT, signal_handler)
    t.start()

    while not t.stop_flag:
        time.sleep(1)

if __name__ == "__main__":
    main()