守护进程与守护线程

主进程与子进程之间各自执行, 互不干扰.

主进程 代码 执行完毕后, 程序本身不会结束, 主进程会等到 所有的子进程结束之后 才结束. 因为, 主进程要负责给子进程回首一些系统资源.

而守护进程本身是一个子进程, 守护的是主进程(的代码).

守护进程:

  守护进程结束的条件是: 主进程的 代码 结束, 守护进程跟着结束.

看代码现象:

import time
from multiprocessing import Process


def func():
    for i in range(20):
        time.sleep(0.5)
        print('in func')


if __name__ == '__main__':
    p = Process(target=func)
    p.daemon = True  # 表示设置p为一个守护进程
    p.start()
    print('in main')
    time.sleep(2)
    print('finished')


#打印结果为
"""
in main
in func
in func
in func
finished
"""
守护进程1
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(4)
    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(2)
    print('finished')
    p2.join()


#打印结果为
"""
in main
start : func2
in func
in func
in func
finished
in func
in func
in func
in func
in func
end : func2
"""
守护进程2

守护线程:

  守护线程守护主线程, 主线程结束, 守护线程随之结束.而主线程结束,意味着进程结束. 进程若结束, 那么其他所有的子线程都会结束,

所以 主线程只有等到所有非守护线程结束后, 才能结束.

  守护线程结束的本质: 

        所有非守护线程结束后, 主线程才结束. 主线程结束意味着主进程结束.主进程结束,守护线程被强制结束.

看代码:

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('主线程结束')


#打印结果
"""
start son
守护线程
守护线程
守护线程
守护线程
守护线程
主线程结束
守护线程
守护线程
守护线程
守护线程
end son
"""
守护线程

总结:

守护进程 :只会守护到主进程的代码结束
守护线程 :会守护所有其他非守护线程的结束
原文地址:https://www.cnblogs.com/LL97155472/p/10730656.html