Python线程退出代码

时间:2009-06-12 13:23:42

标签: python multithreading exit-code

有没有办法判断一个线程是正常退出还是因为异常?

3 个答案:

答案 0 :(得分:15)

如前所述,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',)

答案 1 :(得分:0)

如果成功,您可以将某个全局变量设置为0,如果存在异常,则可以设置为非零。这是一个非常标准的惯例。

但是,您需要使用互斥锁或信号量来保护此变量。或者你可以确保只有一个线程会写入它而所有其他线程只会读它。

答案 2 :(得分:0)

让您的线程函数捕获异常。 (您可以使用一个简单的包装函数来执行此操作,该函数只调用try中的旧线程函数... excepttry ... except ... { {1}}阻止)。然后问题变成“如何将信息从一个线程传递到另一个线程”,我想你已经知道如何做到这一点。