2020年8月16日 / 148次阅读 / Last Modified 2020年10月6日
多线程,异常处理
一时心血来潮做了个测试,验证了一个需要明确的python程序运行逻辑,即如果在线程中出现异常,主程序(主线程)不会退出。退出的只是那个异常线程。
测试代码如下:
import time
import threading
def tt():
print('before raise')
raise ValueError('whatever')
print('after raise')
th = threading.Thread(target=tt)
th.start()
for i in range(10):
print('main thread is runing...')
time.sleep(1)
运行效果:
D:\py>python test.py
before raise
main thread is runing...
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\xinli\AppData\Local\Programs\Python\Python37\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\xinli\AppData\Local\Programs\Python\Python37\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 7, in tt
raise ValueError('whatever')
ValueError: whatever
main thread is runing...
main thread is runing...
main thread is runing...
main thread is runing...
main thread is runing...
main thread is runing...
main thread is runing...
main thread is runing...
main thread is runing...
之前,我也有笔记提到过,在线程中调用sys.exit,退出的也只是那个线程,主程序继续运行。
那么,如果主线程raise,其它线程的命运如何呢?
这个细节主要就是看代码创建的线程的daemon参数。
-- EOF --
本文链接:https://www.pynote.net/archives/2364
前一篇:.whl文件介绍和安装
后一篇:np.array的stack操作
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记