python中多线程如何用Ctrl+C终止

在编写python多线程程序时,发现用Ctrl+C无法终止,就算用Ctrl+Z强制当前进程转为后台并使之停止,而实际上并未停止,用ps命令一查还在运行,于是上网上找资料,动手实践,记录分享一下解决办法。原理是:用另外一个进程来接受信号后杀掉执行任务进程。

在你的代码中增加如下类

class Watcher():

    def __init__(self):
        self.child = os.fork()
        if self.child == 0:
            return
        else:
            self.watch()

    def watch(self):
        try:
            os.wait()
        except KeyboardInterrupt:
            self.kill()
        sys.exit()

    def kill(self):
        try:
            os.kill(self.child, signal.SIGKILL)
        except OSError:
            pass

然后在你的线程启动之前,实例化一个Watcher对象

def main():
    init()
    Watcher()
    start_your_thread1()
    start_your_thread2()
    start_your_thread3()

之后你就能发现能用Ctrl+C结束你的多线程程序了,而且是彻底结束。

你可能感兴趣的:(python中多线程如何用Ctrl+C终止)