zoukankan      html  css  js  c++  java
  • 守护进程与守护线程

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

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

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

    守护进程:

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

    看代码现象:

    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
    """
    守护线程

    总结:

    守护进程 :只会守护到主进程的代码结束
    守护线程 :会守护所有其他非守护线程的结束
  • 相关阅读:
    verilog学习(9)实战之存储器&奇偶校验
    求职经验之综合岗位三面
    求职经验之综合岗位二面
    求职经验之综合岗位
    verilog学习(8)实战之PPL与串行/解串器
    verilog学习(7)实战之扫描链
    verilog学习(6)实战4之触发器与锁存器
    verilog学习(5)实战3之计数器与bus
    verilog学习(4)实战1之基础练习
    求职经验之器件与芯片岗
  • 原文地址:https://www.cnblogs.com/LL97155472/p/10730656.html
Copyright © 2011-2022 走看看