守护线程概念

守护线程:如果在程序中将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为,

  1. thread.daemon = True

注意:要在thread.start()之前设置,默认是False的,也就是主线程结束时,子线程依然在执行。

对于python应用我们都知道main方法是入口,它的运行代表着主线程开始工作了,我们也知道Python虚拟机里面有垃圾回收器的存在使得我们放心让main飞奔,然而这背后的故事是垃圾回收线程作为守护着主线程的守护线程默默的付出着。
旧时代皇帝驾崩
妃子陪葬

如下代码,主线程执行了exit() 【其实并没有真正结束】,子线程还在继续执行

  1. import threading
  2. import time
  3. def work1():
  4. for i in range(10):
  5. print("正在执行...", i)
  6. time.sleep(0.5)
  7. if __name__ == '__main__':
  8. # 创建子线程
  9. t1 = threading.Thread(target=work1)
  10. # 启动子线程
  11. t1.start()
  12. # 睡2秒
  13. time.sleep(2)
  14. print("Game Over")
  15. # 让程序退出
  16. # 当主线程睡眠2秒,开始结束字节的时候,但是子线程还没有结束,默认情况下,子线程继续执行
  17. exit()

image.png

2. 设置守护线程

  1. #...
  2. # 设置子线程 t1 为守护线程(如果主线程结束了,也随之结束)
  3. t1.daemon = True
  4. # 启动子线程
  5. t1.start()
  6. #...

image.png