zoukankan      html  css  js  c++  java
  • 守护进程(Python)

    #__author__:Kelvin
    #date:2020/5/10 11:37
    import time
    from multiprocessing import Process
    
    def son1():
        while True:
            print('--> in son1')
            time.sleep(1)
    
    def son2():   # 执行10s
        for i in range(10):
            print('in son2')
            time.sleep(1)
    
    if __name__ == '__main__':    # 3s
        p1 = Process(target=son1)
        p1.daemon = True    # 表示设置p1是一个守护进程
        p1.start()
        p2 = Process(target=son2,)
        p2.start()
        time.sleep(3)
        print('in main')
    
    
    # 主进程会等待所有的子进程结束,是为了回收子进程的资源
    # 守护进程会等待主进程的代码执行结束之后再结束,而不是等待整个主进程结束.
    # 主进程的代码什么时候结束,守护进程就什么时候结束,和其他子进程的执行进度无关
    
    # 要求守护进程p1必须在p2进程执行结束之后才结束
    # import time
    # from multiprocessing import Process
    #
    # def son1():
    #     while True:
    #         print('--> in son1')
    #         time.sleep(1)
    #
    # def son2():   # 执行10s
    #     for i in range(10):
    #         print('in son2')
    #         time.sleep(1)
    #
    # if __name__ == '__main__':    # 3s
    #     p1 = Process(target=son1)
    #     p1.daemon = True    # 表示设置p1是一个守护进程
    #     p1.start()
    #     p2 = Process(target=son2,)
    #     p2.start()
    #     time.sleep(3)
    #     print('in main')
    #     p2.join()    # 等待p2结束之后才结束
    
    # 等待p2结束 --> 主进程的代码才结束 --> 守护进程结束

    要知道的两个问题:

    1:为什么守护线程不能在主进程结束后再结束?

    答:因为主进程要对守护进程结束后的资源进行回收,所有守护进程必须在主进程结束之前就结束。因此守护进程选择在主进程的代码执行结束这个节点结束自己。

    2:守护进程可以守护其他子进程么?

    答:不可以,守护进程只能守护主进程。

  • 相关阅读:
    Unity 执行命令行
    c#中的特性,以及一些思考
    miniui禁用combobox
    给textarea赋值并可编辑
    js不允许input输入空格
    使用OPENROWSET函数连接并访问远程数据库数据
    miniui 换页符点击无效
    AJAX基本结构及使用
    SQL Server查询数据库中包含某个值的表和字段
    js实现input输入框只能输入数字的功能
  • 原文地址:https://www.cnblogs.com/sun-10387834/p/12862653.html
Copyright © 2011-2022 走看看