Q.什么是守护线程?
A:很通俗的就是说:"Tank上顶塔,刺客切割"。我们把主要输出看成我们的主进程,而我们的Tank就是我们的子进程。守护进程就是告诉主进程你做就好了,不要等我!
一般创建了子进程,主线程都会等子进程完全执行完,主进程才会结束,而守护线程就是主线程不等子进程,主线程做完程序立马结束。
#注意一定要把daemo 设置在 start 之前设置
p=Process(target=func)
p.daemon=True
下面是一个例子
from multiprocessing import Process
import time
def func():
time.sleep(0.2)
print("我还活着")
if __name__=='__main__':
p=Process(target=func)
p.daemon=True #子进程变成守护进程 一定要在start 之前设置
p.start()
print('已完成')
我们可以看出 子进程并没有被打印,因为主进程在子进程之前完成的!这样子进程还在休眠之中。
下面是普通
def func2():
print("888888")
time.sleep(8)
print("8888888888888111111")
if __name__=='__main__':
p=Process(target=func)
# p.daemon=True #子进程变成守护进程 一定要在start 之前设置
# p.start()
# print('已经完成')
Process(target=func2).start() ##普通进程
print("普通线程完成")
运行结果如下:
通过上面的例子我们可以看出普通进程和守护线程的区别
注意点
注意一定要把daemo 设置在 start 之前设置
这里可能小伙伴就会想起 join()函数 为什么你的例子没有写join()
Join()是主程序等我这个进程执行完毕了,程序才往下走,不影响我们的实验。
突然想到如果我定义了子进程为守护线程 那么就算给它加上join() 也不会影响。自己可以测试一下!