守护进程
注意:daemon=True 必须写在 start()之前
mport 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()
知识兔守护线程
mport 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.守护线程到底是怎么结束的
主线程结束了,主进程也结束,守护线程被主进程的结束结束掉了
守护进程问题
为什么主进程要等待子进程结束之后才结束?
因为主进程要负责给子进程回收一些系统资源