守护进程
注意:daemon=True 必须写在 start()之前
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import time from multiprocessing import Process def func(): for i in range(20): time.sleep(0.5) print('in func') def func2(): print('start : func2') time.sleep(5) print('end : func2') if __name__ == '__main__': p = Process(target=func) p.daemon = True # 表示设置p为一个守护进程 p.start() p2 =Process(target=func2) p2.start() print('in main') time.sleep(3) print('finished') p2.join()
守护线程
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
import time from threading import Thread def daemon_func(): while True: time.sleep(0.5) print('守护线程') def son_func(): print('start son') time.sleep(5) print('end son') t = Thread(target=daemon_func) t.daemon = True #守护 t.start() Thread(target=son_func).start() time.sleep(3) print('主线程结束')
守护进程和守护线程的区别
无论是进程还是线程, 都遵循: 守护xxx 会等待主xxx 运行完毕后被销毁
守护进程 :只会守护到主进程的代码结束
守护线程 :会守护所有其他非守护线程的结束
运行完毕井非终止运行
对主进程来说, 运行完毕指的是主进程代码运行完毕
对主线程来说, 运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕, 主线程才算运行完毕
守护进程:
主进程和子进程互不干扰
主进程执行完毕之后程序不会结束,会等待所有的子进程结束之后才结束
守护进程 :
是一个子进程,守护的是主进程
结束条件 : 主进程的代码结束,守护进程也结束
主进程的代码结束,守护进程结束
主进程要回收守护进程(子进程)的资源
主进程等待其他所有子进程结束
主进程回收所有子进程的资源
守护线程:
1.主线程会等待子线程的结束而结束
2.守护线程会随着主线程的结束而结束
守护线程会守护主线程和所有的子线程
守护线程问题:
1.主线程需不需要回收子线程的资源
不需要,线程资源属于进程,所以进程结束了,线程的资源自然就被回收了
2.主线程为什么要等待子线程结束之后才结束
主线程结束意味着进程进程,进程结束,所有的子线程都会结束
要想让子线程能够顺利执行完,主线程只能等
3.守护线程到底是怎么结束的
主线程结束了,主进程也结束,守护线程被主进程的结束结束掉了
守护进程问题
为什么主进程要等待子进程结束之后才结束?
因为主进程要负责给子进程回收一些系统资源