python 守护线程

python中默认创建的线程都是非守护线程或者说是普通线程。通过 setDaemon(True)将线程设置为守护线程,举一个例子来说明什么守护线程和普通线程的不同。

实例

主线程启动两个线程:

  • 子线程1-非守护线程,运行1秒
  • 子线程2-守护线程,运行5秒

    def method(num):
    if i % 2 == 0:
        time.sleep(5)
    else:
        time.sleep(1)
    print("thread-%d: done" % num)
    
    
    if __name__ == "__main__":
    for i in range(1, 3):
        t = Thread(target=method, args=(i,))
        if i % 2 == 0:
            t.setDaemon(True)
        t.start()
        print("thread-%d:stared" % i)      
    

运行结果如下:

thread-1:stared
thread-2:stared
thread-1: done

分析:

  • 主线程启动子线程,等待非守护线程 子线程1运行
  • 子线程1运行1秒退出
  • 子线程2启动了还没有运行,主线程就已经退出了。

总结:

  • 守护线程会同主线程的结束而结束,如果需要子线程随主线程一同结束,使用 setDaemon(True)将其设置为守护线程。
  • 如需等待子线程运行结束后,主线程再退出,则无需设置。

当主线程执行完毕,则守护线程会跟随主线程退出,即使任务没有执行完。