线程异常,不会导致主程序退出

2020年8月16日 / 12次阅读 / Last Modified 2020年8月16日
多线程

一时心血来潮做了个测试,验证了一个需要明确的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

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top