【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结束
posted @ 2024-01-23 14:26  Chimengmeng  阅读(6)  评论(0编辑  收藏  举报
/* */