先放上示例:
import time
import threading
def thread_test():
while True:
time.sleep(1)
print('Hello!')
threading.Thread(target=thread_test).start()
time.sleep(3)
print('End.')
打印:
Hello!
Hello!
End.
Hello!
Hello!
Hello!
即使主线程结束了(打印了End.
),但是创建的子线程仍然不断的打印Hello!
信息,如果我们需要在主线程结束后立刻关闭子线程(避免占用资源,避免使用主线程中资源导致报错等),可以使用Thread
的setDaemon
方法进行设置。
setDaemon
方法是设置该线程是否为守护线程,参数为布尔值,默认是否,如果线程设置为守护线程,则主线程关闭后所有守护线程立刻关闭,即可解决上述问题。
将上述代码作如下修改:
t = threading.Thread(target=thread_test)
t.setDaemon(True)
t.start()
time.sleep(3)
print('End.')
打印:
Hello!
Hello!
End.