从子线程停止主线程

2024-02-19

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

提前致谢


让线程“控制”其父级并不是一个好的做法。主线程管理/监视/控制它启动的线程更有意义。

所以我的建议是你的主线程启动 2 个线程:一个你已经拥有的线程,它在某个时刻完成/引发异常,另一个线程读取用户输入。主线程现在等待(joins) 前者完成,完成后退出。

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'

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

IMO,没有必要诉诸信号之类的低级东西。该解决方案甚至不需要使用try-except(尽管你可能决定你想要一个try-except in ThreadA,使其干净退出)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从子线程停止主线程 的相关文章

随机推荐