9、守护父线程的子线程


author:14组开发周博文 欢迎各位老师与同学指导和指正!

  • 在创建线程实例对象时,可以将参数 daemon 指定为 True,从而将创建的线程设置为守护线程。此外,也可以在调用线程实例的对象的方法 start() 之前调用线程实例对象的方法 setDaemon(True)或者将属性 daemon 的值设置为 True,从而将线程设置为守护线程。

  • 守护线程是为了守护父线程而存在的子线程,当父线程结束时,守护线程就没有存在的意义了,因此,守护线程会随着父线程的结束而立刻结束。

  1. import time
  2. from threading import Thread, current_thread
  3. class MyThread(Thread):
  4. def run(self):
  5. print(f"子线程 {current_thread().getName()} 启动")
  6. time.sleep(2)
  7. print(f"子线程 {current_thread().getName()} 结束")
  8. def main():
  9. print(f"父线程 {current_thread().getName()} 启动")
  10. mt = MyThread()
  11. mt.daemon = True
  12. # 或者
  13. # mt.setDaemon(True)
  14. mt.start()
  15. time.sleep(1)
  16. print(f"父线程 {current_thread().getName()} 结束")
  17. if __name__ == "__main__":
  18. main()

运行结果

父线程 MainThread 启动 子线程 Thread-1 启动
父线程 MainThread 结束

  • 运行结果可以看出,不管守护子线程是否运行结束,当父线程运行结束后,守护子线程会立刻停止运行。

09守护父线程的子线程 - 图1