有没有办法判断线程是正常退出还是因为异常退出?
问问题
12152 次
3 回答
20
如前所述,围绕 Thread 类的包装器可以捕获该状态。这是一个例子。
>>> from threading import Thread
>>> class MyThread(Thread):
def run(self):
try:
Thread.run(self)
except Exception as err:
self.err = err
pass # or raise err
else:
self.err = None
>>> mt = MyThread(target=divmod, args=(3, 2))
>>> mt.start()
>>> mt.join()
>>> mt.err
>>> mt = MyThread(target=divmod, args=(3, 0))
>>> mt.start()
>>> mt.join()
>>> mt.err
ZeroDivisionError('integer division or modulo by zero',)
于 2009-06-12T15:03:59.813 回答
0
如果成功,您可以将某个全局变量设置为 0,如果出现异常,则可以将其设置为非零。这是一个非常标准的约定。
但是,您需要使用互斥锁或信号量来保护此变量。或者您可以确保只有一个线程会写入它,而所有其他线程只会读取它。
于 2009-06-12T13:33:12.417 回答
0
让你的线程函数捕获异常。(您可以使用一个简单的包装函数来执行此操作,该函数只在try
...except
或try
...块中调用旧线程函数)except
。else
然后问题就变成了“如何将信息从一个线程传递到另一个线程”,我想您已经知道如何做到这一点。
于 2009-06-12T13:43:05.590 回答