Python线程退出代码
有没有办法判断一个线程是正常结束的,还是因为出现了异常而结束的呢?
3 个回答
0
让你的线程函数能够捕捉异常。你可以用一个简单的包装函数来实现,这个函数在一个try
...except
或者try
...except
...else
的结构里调用原来的线程函数。这样一来,问题就变成了“如何在一个线程和另一个线程之间传递信息”,我想你应该已经知道怎么做了。
0
你可以设置一个全局变量,如果成功就设为0,如果出现异常就设为非零值。这是一种很常见的做法。
不过,你需要用互斥锁(mutex)或信号量(semaphore)来保护这个变量。或者你也可以确保只有一个线程会写这个变量,其他线程只负责读取它。
21
如前所述,可以在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',)