应该捕获工作线程引发的异常,以完全控制您的脚本/应用程序。如果未捕获所引发的异常会怎样?
如python文档中所述:
一旦线程开始活动,就认为该线程 '活'。当它的run()方法终止时,它停止活动– 是正常的还是引发未处理的异常。 is_alive()>方法测试线程是否处于活动状态。
我的解释:
未捕获的异常只会终止工作线程,而不会终止脚本/应用程序。
测试代码:
def raise_exception():
raise Exception("Raise exception")
def sys_exit():
import sys
sys.exit(0)
raise_exception_thread = threading.Thread(target=raise_exception)
sys_exit_thread = threading.Thread(target=sys_exit)
raise_exception_thread.start()
sys_exit_thread.start()
import time
time.sleep(1)
print("is raise_exception_thread alive {}".format(raise_exception_thread.is_alive()))
print("is sys_exit_thread alive {}".format(sys_exit_thread.is_alive()))
以上代码的输出复制到此处:
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/home/mazh/.study/cmake/python_source/Parallelism/Thread/test_thread_termination.py", line 15, in raise_exception
raise Exception("Raise exception")
Exception: Raise exception
is raise_exception_thread alive False
is sys_exit_thread alive False
我的观察:
初始问题:
其他问题: