我正在编写一个python程序,在主函数中我正在启动一个连续运行的线程。启动线程后,主函数进入 while 循环,连续获取用户输入。如果子线程中出现异常,我也想结束主函数。最好的方法是什么?
提前致谢
让线程“控制”其父级并不是一个好的做法。主线程管理/监视/控制它启动的线程更有意义。
所以我的建议是你的主线程启动 2 个线程:一个你已经拥有的线程,它在某个时刻完成/引发异常,另一个线程读取用户输入。主线程现在等待(join
s) 前者完成,完成后退出。
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(使用前将#替换为@)