• 守护进程与守护线程


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

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

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

    守护进程:

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

    看代码现象:

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

    总结:

    守护进程 :只会守护到主进程的代码结束
    守护线程 :会守护所有其他非守护线程的结束
  • 相关阅读:
    线程基础之进程,线程,任务
    Jobs深入学习
    Quartz的API简介及Jobs和Trigger介绍
    Quartz入门及简单实现
    maven仓库配置阿里云镜像
    Activiti图表bpmn对应的xml文件
    Activiti流程设计工具
    Activiti的25张表
    subprocess.Popen指令包含中文导致乱码问题解决
    Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
  • 原文地址:https://www.cnblogs.com/LL97155472/p/10730656.html
Copyright © 2020-2023  润新知