Python中提供了Thread类来支持多线程,线程在执行过程中可以通过调用join()方法来阻塞线程。
要优雅的关闭线程,可以采用下面的方法:
- 使用Thread类的daemon属性设置为True,表示线程为守护线程,当主线程结束时,守护线程也会自动结束。
- 使用Thread类的is_alive()方法判断线程是否存活,如果存活则调用join()方法来阻塞线程,直到线程结束。
- 使用线程的安全标志(比如event对象)来控制线程的执行,当线程需要结束时,设置安全标志并等待线程结束。
以下是一个例子:
import threading
import time
event = threading.Event()
def worker():
while not event.is_set():
print('do some work')
time.sleep(1)
print('thread exit')
t = threading.Thread(target=worker)
t.daemon = True
t.start()
time.sleep(5)
event.set()
在上面的例子中,worker线程会持续执行直到event对象的is_set()方法返回True,此时线程会优雅的退出。