守护线程

本文探讨了Python中守护线程与主线程的关系,详细解释了守护线程如何随主线程结束而结束,以及其在等待子线程完成后的行为特性。了解守护线程在多线程编程中的作用对于优化程序性能至关重要。
# 没有守护线程时,主线程会等待子线程的结束,子线程结束后,主线程才会结束

# import time
# from threading import Thread
#
#
# def func1():
#     print(666)
#     time.sleep(10)
#
# def func2():
#     pass
#
# if __name__ == '__main__':
#     t = Thread(target=func1)
#     t.start()


# 将子线程设置为守护线程,主线程结束则守护线程结束
# import time
# from threading import Thread
#
#
# def func1():
#     print(666)
#     time.sleep(10)
#
# def func2():
#     pass
#
# if __name__ == '__main__':
#     t = Thread(target=func1)
#     t.daemon = True # 设置子线程为守护线程,设置后,主线程结束了守护线程随之结束
#     t.start()



# 当有主线程、子线程、守护线程时,主线程结束了,守护线程会等待到子线程结束才结束。也就是说,守护线程必须等待到主线程与子线程代码执行结束守护线程才会结束,结束后整体进程结束完毕
    # 不同于进程,守护进程时,当主进程执行结束后,守护进程一定结束
import time
from threading import Thread

def func1():
    while True:
        print('*'* 10)
        time.sleep(1)

def func2():
    print('in func2')
    time.sleep(5)

if __name__ == '__main__':
    t = Thread(target=func1)
    t.daemon = True # 设置子线程为守护线程,设置后,主线程结束了守护线程随之结束
    t.start()
    t2 = Thread(target=func2)
    t2.start()
    t2.join()    # 阻塞等待子线程结束
    print('主线程')


# 主进程在执行完自己的代码执行结束后(守护进程在此时就被回收),然后主进程会一直等非守护的进程都运行完毕后回收进程的资源(否则会产生僵尸进程),之后主进程才会真正的结束
# 主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时被回收),因为主线程的结束意味着进程的结束,进程整体资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束。

 

转载于:https://www.cnblogs.com/whylinux/p/9846559.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值