我有一组任务要并行执行,但在任务结束时,我需要知道是否有线程引发异常。 我不需要直接处理异常,只需要知道其中一个线程是否因异常而失败,这样就可以干净地终止脚本
下面是一个简单的例子:
#!/usr/bin/python
from time import sleep
from threading import Thread
def func(a):
for i in range(0,5):
print a
sleep(1)
def func_ex():
sleep(2)
raise Exception("Blah")
x = [Thread(target=func, args=("T1",)), Thread(target=func, args=("T2",)), Thread(target=func_ex, args=())]
print "Starting"
for t in x:
t.start()
print "Joining"
for t in x:
t.join()
print "End"
在“End”之前,我想遍历线程,看看是否有失败,然后决定是否可以继续执行脚本,或者是否需要在此时退出。
我不需要拦截异常或停止其他线程,我只需要知道最后是否有失败。
当对线程的
join()
调用返回线程堆栈时,线程堆栈已解除绑定,所有有关异常的信息都已丢失。因此,不幸的是,您需要提供自己的异常注册机制;我们将讨论一些技术here。对于不需要处理异常的情况,一种简单的方法是使用全局列表并向其追加相关信息。你的代码会变成:
注意:全局变量通常被认为是一种糟糕的技术,但是它们是线程间通信的一种简单机制。你只需要记住,如果一个线程通过这个路由发送信息,另一个线程必须寻找它。
相关问题 更多 >
编程相关推荐