什么是守护线程:在后台运行,为其他线程提供服务的线程成为守护线程。
为什么要引入守护线程:
thread模块不支持守护线程的概念,当主线程退出时,所有的子线程都将终止,不管它们是否仍在工作,
如果你不希望发生这种行为,就要引入守护线程的概念。
守护线程的调用格式:thread.setDaemon(True)
如何使用守护线程:
1.当只有一个子线程并且为守护线程,那么这个守护线程就会等待主线程运行完毕后挂掉
2.当有多个子线程时,守护线程就会等待所有的子线程运行完毕后,守护线程才会挂掉
什么时候设置守护线程:
如果主线程准备退出时,不需要等待某些子线程执行完成,就可以为这些子线程设置守护线程标记。该标记为真时,表示该线程是不重要的,或者说该线程只是用来等待客户端请求而不做任何其它事情。
使用守护线程的前提:
1.要将一个线程设置为守护线程,需要在启动线程之前执行如下赋值语句:thread.daemon=True。
2.要检查线程的守护状态,也只需要检查这个值即可。一个新的子线程会继承父线程的守护标记。
3.主线程将在所有非守护线程退出之后才退出,换句话说,就是没有存活的非守护线程时。
守护线程在threading模块中的工作方式:
守护线程一般是一个等待客户端请求服务的服务器。如果没有客户端请求,守护线程就是空闲的,如果把一个线程设置为守护线程,就表示这个线程是不重要的,进程退出时就不需要等待这个线程执行完成。
注意:
1、守护线程会在该进程内所有非守护线程全部都运行完毕后,守护线程才会挂掉。
2、守护线程守护的是:当前进程内所有的子线程!
3、主线程在其他非守护线程运行完毕后才算运行完毕,守护线程在此时被回收。