从子线程停止主线程

Shr*_*aya 2 python multithreading exception

我正在写一个python程序,在main函数中我正在启动一个连续运行的线程.启动线程后,main函数进入while循环,连续进行用户输入.如果子线程中有异常,我也想结束main函数.最好的方法是什么?

提前致谢

shx*_*hx2 7

有一个"控制"其父母的线程不是一个好习惯.主线程管理/监视/控制它启动的线程更有意义.

所以我的建议是你的主线程启动2个线程:你已经拥有的线程,在某些时候完成/引发异常,以及一个读取用户输入.主线程现在等待join前者完成,并在完成后退出.

from threading import Thread
import time

class ThreadA(Thread):
    def run(self):
        print 'T1: sleeping...'
        time.sleep(4)
        print 'T1: raising...'
        raise RuntimeError('bye')

class ThreadB(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
    def run(self):
        while True:
            x = raw_input('T2: enter some input: ')
            print 'GOT:', x

t1 = ThreadA()
t2 = ThreadB()
t1.start()
t2.start()
t1.join()  # wait for t1 to finish/raise
print 'done'
Run Code Online (Sandbox Code Playgroud)

由于ThreadB是守护进程,因此我们不必明确地使其停止,也不必加入它.当主线程退出时,它也会退出.

IMO,没有必要求助于像信号这样的低级别的东西.这个解决方案甚至不需要使用try-except(尽管你可能决定要一个try-exceptin ThreadA,让它干净利落).