守护线程(如果你想要绑定,主线程结束,子线程也结束可以用守护线程)

Posted kingjinbiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了守护线程(如果你想要绑定,主线程结束,子线程也结束可以用守护线程)相关的知识,希望对你有一定的参考价值。

 

 

 

7第七周-网络编程-守护进程

  守护进程:设置一个线程是守护线程,就说明这不是一个很重要的线程,对于这样的线程,只要主线程运行结束,就会直接退出。而如果一个线程不是守护线程的话,即使主线程运行结束也不会退出,而是等待所有的非守护线程运行结束,再退出。。简单概念:守护线程主线挂了,子线程会挂掉。非守护线程,主线程挂掉,子线程还会继续继续。

1、守护线程&非守护线程

举例:

A、守护进程:

import threading,time

def _demon():
    for i in range(1,5):
        print(i)
        time.sleep(2)

t = threading.Thread(target=_demon)
t.setDaemon(True) #把线程设置为守护进程,要放在start前面执行
t.start()
print("end the process")
输出:

1
end the process

 B、非守护进程:

import threading,time

def _demon():
    for i in range(1,5):
        print(i)
        time.sleep(2)

t = threading.Thread(target=_demon)
t.setDaemon(False)
t.start()
print("end the process")
输出:
1
end the process
2
3
4

 注:默认就是非守护进程,要设置进程为主进程,就要手动开启。 

  如果你设置一个线程为守护线程,,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。 
如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性。即,在线程开始(thread.start())之前,调用setDeamon()函数,设定线程的daemon标志。(thread.setDaemon(True))就表示这个线程“不重要”。

  如果你想等待子线程完成再退出,那就什么都不用做。,或者显示地调用thread.setDaemon(False),设置daemon的值为false。新的子线程会继承父线程的daemon标志。整个Python会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。

以上是关于守护线程(如果你想要绑定,主线程结束,子线程也结束可以用守护线程)的主要内容,如果未能解决你的问题,请参考以下文章

守护线程

python守护线程

主线程啥都没做,就会等待子线程结束。这是为啥?

join和 Daemon守护线程

pythony中子进程如果一定时间不结束就停止应该如何做?

java主线程结束和子线程结束之间的关系