python浅析守护线程与非守护线程的区别与使用

2022-08-03 13:55:27
目录
什么是守护线程非守护线程守护线程

什么是守护线程

    当主线程执行结束后,所有>很多语言的 垃圾收集器 就运用了 守护线程,去回收程序不再使用的垃圾内存而非守护线程其实就跟守护线程相反,当主线程结束后,如果子线程还在运行,子线程并不会直接结束,而是 继续完成任务,等待子线程都执行完毕才结束

    非守护线程

      下面是一个普通线程的例子,也就是>我们创建了 autofelix 购物线程,去模拟购物流程的任务可以看出当主线程已经结束,但是子线程依然 没有退出因为 shopping 这个子线程任务还在工作,所以程序会一直运行下去
      import threading
      import time
      def shopping():
          while True:
              print("飞兔小哥 进入了商场...'")
              time.sleep(1)
      if __name__ == '__main__':
          autofelix = threading.Thread(target=shopping)
          autofelix.start()
          print('飞兔小哥 准备出去买东西...')
          time.sleep(0.5)
          print('飞兔小哥 看到了西红柿...')
          time.sleep(0.5)
          print('飞兔小哥 又买了土豆...')
          time.sleep(0.5)
          print('飞兔小哥 回家了!')
      

      # 运行结果
      飞兔小哥 进入了商场...'
      飞兔小哥 准备出去买东西...
      飞兔小哥 看到了西红柿...
      飞兔小哥 又买了土豆...
      飞兔小哥 进入了商场...'
      飞兔小哥 回家了!
      飞兔小哥 进入了商场...'
      飞兔小哥 进入了商场...'
      飞兔小哥 进入了商场...'
      飞兔小哥 进入了商场...'
      飞兔小哥 进入了商场...'
      ........

      守护线程

        我们可以通过设置>xxx.daemon = True 将线程变成守护线程必须在启动之前将线程配置为守护程序或非守护程序,否则 python 将引发运行时错误守护程序线程不会像普通线程一样正常退出,所以要确保,子任务的异常结束不会产生任何负面影响
        import threading
        import time
        def shopping():
            while True:
                print("飞兔小哥 进入了商场...'")
                time.sleep(1)
        if __name__ == '__main__':
            autofelix = threading.Thread(target=shopping)
            autofelix.daemon = True
            autofelix.start()
            print('飞兔小哥 准备出去买东西...')
            time.sleep(0.5)
            print('飞兔小哥 看到了西红柿...')
            time.sleep(0.5)
            print('飞兔小哥 又买了土豆...')
            time.sleep(0.5)
            print('飞兔小哥 回家了!')
        

        # 运行结果
        飞兔小哥 进入了商场...'
        飞兔小哥 准备出去买东西...
        飞兔小哥 看到了西红柿...
        飞兔小哥 进入了商场...'
        飞兔小哥 又买了土豆...
        飞兔小哥 回家了!

        到此这篇关于python浅析守护线程与非守护线程的区别与使用的文章就介绍到这了,更多相关python守护线程内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!