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

    总结:

    守护进程 :只会守护到主进程的代码结束
    守护线程 :会守护所有其他非守护线程的结束
  • 相关阅读:
    docker入门实战3 镜像、容器、仓库
    彻底理解java回调机制
    struct和typedef struct
    Andriod广播注册接收过程简析
    Android获取其他包的Context实例
    Android中获取应用程序(包)的信息-----PackageManager的使用
    修改virtualbox虚拟硬盘容量
    Ubuntu文件系统和目录结构
    Android中Theme和Style的应用
    十步完全理解SQL(转)
  • 原文地址:https://www.cnblogs.com/LL97155472/p/10730656.html
Copyright © 2011-2022 走看看