Shr*_*aya 2 python multithreading exception
我正在写一个python程序,在main函数中我正在启动一个连续运行的线程.启动线程后,main函数进入while循环,连续进行用户输入.如果子线程中有异常,我也想结束main函数.最好的方法是什么?
提前致谢
有一个"控制"其父母的线程不是一个好习惯.主线程管理/监视/控制它启动的线程更有意义.
所以我的建议是你的主线程启动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,让它干净利落).
| 归档时间: |
|
| 查看次数: |
3600 次 |
| 最近记录: |