在执行完主线程后以上程序继续执行子线程的后续内容,并不会立刻退出:
import threading
import time
def main():
t1 = threading.Thread(target=demo1)
t2 = threading.Thread(target=demo2)
t1.start()
t2.start()
def demo3():
for i in range(3):
print('----demo3----')
def demo1():
for i in range(3):
print(f'----demo1----{i}')
time.sleep(1)
t3 = threading.Thread(target=demo3)
t3.start()
def demo2():
for i in range(3):
print(f'----demo2----{i}')
time.sleep(1)
if __name__ == '__main__':
main()
print('------1--------')
#主线程在子线程执行完之前不会结束
----demo1----0
----demo2----0
------1--------
----demo2----1
----demo3----
----demo1----1
要想在主线程执行完成后立刻结束整个线程,需要:
def main():
t1 = threading.Thread(target=demo1)
t1.setDaemon(True)
t2 = threading.Thread(target=demo2)
t2.setDaemon(True)#设置为守护线程,主线程结束立刻结束
#属于配置该线程
t1.start()
t2.start()
----demo1----0
----demo2----0
------1--------
在执行完主线程之后,立刻结束所以的子线程并且结束
那如果想要让所有子线程结束之后,再向下执行主线程呢?
t.join()
def main():
t1 = threading.Thread(target=demo1)
#t1.setDaemon(True)
t2 = threading.Thread(target=demo2)
#t2.setDaemon(True)#设置为守护线程,主线程结束立刻结束
t1.start()
t2.start()
t1.join()
t2.join()
在此处,t.join是在线程开始之后进行的,线程开始执行然后进行‘阻塞’,等待线程结束之后再执行主线程