子线程何时开启、何时结束
1.子线程何时开始
当调用了start后,则开启子线程,并且立即执行子线程中的代码
2.子线程何时结束
子线程执行完代码,立即结束
3.主线程何时结束
当所有子线程执行完毕,不在有其他代码需要执行了,即结束
4.Thread.join()与threading.enumerate()
threading.enumerate()是什么,用来做什么?
表示枚举当前线程情况,以列表的方式展示,
一般用来查看线程情况,也可通过len(enumerate)来测出当前线程数量
Thread。join()是什么,用来做什么?
Thread.join()即阻塞,直到被阻塞的子线程执行完毕,再解阻塞,再执行后续的代码
一般在主线程调用,也就阻塞主线程,更方便的观察线程情况
import threading
import time
def work1():
"""任务1"""
for i in range(3):
time.sleep(1)
print(" --work1--代码块%d,当前线程的数量:%d"%(i,len(threading.enumerate())))
def work2():
"""任务2"""
for i in range(6):
time.sleep(1)
print(" --work2--代码块%d,当前线程的数量:%d" % (i, len(threading.enumerate())))
if __name__ == '__main__':
print("创建子线程前的线程的情况:",threading.enumerate())
t1=threading.Thread(target=work1)
t2=threading.Thread(target=work2)
time.sleep(1)
print("创建子线程后的线程的情况:", threading.enumerate())
t1.start()
t2.start()
"""
#.join()即阻塞,直到被阻塞的子线程执行完毕,再解阻塞,再执行后续的代码
这里阻塞的t2.join意思是指在整个线程中,在执行35行一下的代码都是主线程在执行,当执行到t2.join
表示当前主进程被卡在t2.join,没有往下执行,只有等t2里面的代码执行完毕之后才会解阻塞,继续往下执行
t2.join()
"""
print("主线程最后执行的代码",threading.current_thread().name)