Python守护线程

Python守护线程教程

Python 中,线程 分为三种形式,即主线程、守护线程和非守护线程。主线程也叫 main 线程,主线程不是守护线程。

守护线程是指在程序运行的时候在后台提供一种通用服务的线程,非守护线程也叫用户线程,是由用户创建的线程。

Python守护线程与非守护线程

当主线程结束时,守护线程也会一起销毁,而主线程的退出,对非守护线程没有任何影响,因为主线程和守护线程互不影响。

Python创建守护线程详解

语法

class MyThread(threading.Thread): def __init__(self, params): pass def run(self): pass t1 = MyThread(params) t.setDaemon(True) t1.start()

说明

我们在创建线程实例之后,调用线程实例的 setDaemon 函数,即可以将线程设置为守护线程,同时,setDaemon 函数必须在 start() 之前调用。

案例

使用 threading 模块创建线程

使用 threading 模块自定义线程类创建守护线程

import threading import time class MyThread(threading.Thread): def __init__(self, name, n): super(MyThread, self).__init__() self.name = name self.n = n def run(self): while True: print("Thread ", self.name, "is running") time.sleep(self.n) def main(): t1 = MyThread("t1", 3) t1.setDaemon(True) t1.start() t2 = MyThread("t2", 2) t2.setDaemon(True) t2.start() if __name__ == "__main__": print("嗨客网(www.haicoder.net)") main()

程序运行后,控制台输出如下:

04 python守护线程.png

我们在创建了线程实例之后,使用线程实例的 setDaemon 方法将线程设置为守护线程,此时,我们看到主线程退出之后,我们的守护线程也立刻退出了,而不像用户线程,如果主线程退出,用户线程不受任何影响。

这里,我们的守护线程虽然有 while 循环,但因为我们的主线程没有 sleep 等待,也没有被阻塞,因此运行后会立刻退出,主线程退出,我们的守护线程也会自动退出。

Python守护线程总结

当主线程结束时,守护线程也会一起销毁,而主线程的退出,对非守护线程没有任何影响,因为主线程和守护线程互不影响。