【6.1】守护线程
【1】主线程死亡,子线程未死亡
- 主线程结束运行后不会马上结束,而是等待其他非守护子线程结束之后才会结束
- 如果主线程死亡就代表者主进程也死亡,随之而来的是所有子线程的死亡
from threading import Thread
import time
def task(name):
print(f'当前 {name} is beginning')
time.sleep(2)
print(f'当前 {name} is ending')
def main():
t = Thread(target=task, args=('dream',))
t.start()
print(f' this is main process')
if __name__ == '__main__':
main()
# 当前 dream is beginning
# this is main process
# 当前 dream is ending
【2】主线程死亡,子线程也死亡
from threading import Thread
import time
def task(name):
print(f'当前 {name} is beginning')
time.sleep(2)
print(f'当前 {name} is ending')
def main():
t = Thread(target=task, args=('dream',))
# 开启守护线程
t.daemon = True
t.start()
print(f' this is main process')
if __name__ == '__main__':
main()
# 当前 dream is beginning
# this is main process
【3】迷惑性例子
from threading import Thread
from multiprocessing import Process
import time
def foo():
print(f' this is foo begin')
time.sleep(1)
print(f' this is foo end')
def func():
print(f' this is func begin')
time.sleep(3)
print(f' this is func end')
def main():
t1 = Thread(target=foo)
t2 = Thread(target=func)
t1.daemon = True
t1.start()
t2.start()
print(f' this is main')
if __name__ == '__main__':
main()
# this is foo begin
# this is func begin
# this is main
# this is foo end
# this is func end
- 分析
- t1 是守护线程,会随着主线程的死亡而死亡
- 当多线程开启时,主线程运行,开启子线程
- 再开启主线程
- 主线程结束后会等待非守护子线程结束,所以需要等待3s,等待func结束运行
- 所以执行顺序是 子线程1---子线程2---主线程---子线程1结束---子线程2结束
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17982385