zoukankan      html  css  js  c++  java
  • 守护进程和守护线程的区别

    守护进程

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


    守护进程问题
    为什么主进程要等待子进程结束之后才结束?
    因为主进程要负责给子进程回收一些系统资源
  • 相关阅读:
    学习笔记——Maven settings.xml 配置详解
    工作随笔——tar命令批量解压
    工作随笔——xshell4安装后应该做的一些事
    容器中跨主机的网络方案-Weave
    使用kubeadm安装kubernetes
    AzureStack混合云大数据解决方案
    容器中跨主机的网络方案-flannel
    一行删除所有docker container的命令
    安装Kafka集群
    Azure VM的加速网络
  • 原文地址:https://www.cnblogs.com/whnbky/p/11552894.html
Copyright © 2011-2022 走看看