守护线程会等待主线程运行完毕后被销毁
需要强调的是:运行完毕并非终止运行
单线程:
import time
from threading import Thread
def sayhi(name):
time.sleep(2)
print('%s say hello' % name)
if __name__ == '__main__':
t = Thread(target=sayhi, args=('allen',))
# t.setDaemon(True) # 必须在t.start()之前设置
t.daemon = True
t.start()
print('主线程')
print(t.is_alive())
结果:
主线程
True
多个线程:
import time
from threading import Thread
def foo():
print(123)
time.sleep(5)
print('end123')
def bar():
print(456)
time.sleep(3)
print('end456')
if __name__ == '__main__':
t1 = Thread(target=foo)
t2 = Thread(target=bar)
t1.daemon = True
t1.start()
t2.start()
print('zhu...........')
结果:
123
456
zhu...........
end456
迷惑人的例子
import time
from threading import Thread
def foo():
print(123)
time.sleep(1)
print('end123')
def bar():
print(456)
time.sleep(3)
print('end456')
if __name__ == '__main__':
t1 = Thread(target=foo)
t2 = Thread(target=bar)
t1.daemon = True
t1.start()
t2.start()
print('zhu...........')
结果:
123
456
zhu...........
end123
end456