1.进程之间是有守护进程的,那么线程之间是否有守护进程那:
from threading import Thread import time def func(): while True: time.sleep(2) print(‘执行一次‘) t=Thread(target=func,) t.start() print(‘主进程执行结束‘)
结果为

主线程进行结束以后,子线程无休止的进行下去,
from threading import Thread import time def func(): while True: time.sleep(2) print(‘执行一次‘) t=Thread(target=func,) t.daemon=True #设置守护进程 t.start() time.sleep(4) print(‘主进程执行结束‘) 结果为 C:\pycharm\python.exe D:/python练习程序/第四十天/Thread_project.py 执行一次 主进程执行结束 Process finished with exit code 0
2看下面程序和现象说明原因:
from threading import Thread import time def func(): while True: time.sleep(2) print(‘执行一次‘) def func2(): time.sleep(10) print(‘进程2执行结束‘) t=Thread(target=func,) t.daemon=True t.start() t1=Thread(target=func2) t1.start() time.sleep(4) print(‘主进程执行结束‘) 结果为: C:\pycharm\python.exe D:/python练习程序/第四十天/Thread_project.py 执行一次 执行一次 主进程执行结束 执行一次 执行一次 进程2执行结束
从结果我们可以看出主线程结束之后,守护进程并没有结束,而是等到子线程2结束时,子线程1(守护线程)才结束
原因:
1.对于主进程来说:运行完毕指的是主进程代码运行完毕
2.对于主线程来说,运行完毕指的是主线程所在的进程内所有的非守护线程统统执行完毕后,主线程才算运行完毕。
1。主进程在其代码执行结束后就已经算执行完成了(守护进程此时会被回收)然后主进程会一直等待非守护进程的子进程都执行结束才回子进程的资源(否则会生成僵尸进程),才会结束。
2.主线程在其他非守护进程运行完毕后才算运行完毕(守护进程在此时才会被回收)。因为主线程的结束才意味着进程的结束,进程整体的资源将被回收,而进程必须保证非守护进程的线程都执行结束才能结束。
原文:https://www.cnblogs.com/ab461087603/p/12518418.html