守护进程

注意:daemon=True 必须写在 start()之前 

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()

守护线程

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.守护线程到底是怎么结束的
主线程结束了,主进程也结束,守护线程被主进程的结束结束掉了


守护进程问题
为什么主进程要等待子进程结束之后才结束?
因为主进程要负责给子进程回收一些系统资源
02-10 03:50