python_多线程

import threading
import time

def lajifenlei():
    time.sleep(2)
    print(threading.current_thread().name+'haha haha') #打印线程名称及字符串

#非多线程方式运行,运行时间为20秒多一些
start_time=time.time()
for i in range(10):
    lajifenlei()
print(time.time()-start_time)

#多线程统计时间却是零点几,究其原因是由于主线程没有等子线程运行结束导致,即每个py文件运行都有一个主线程
#我们声明的是子线程
s_time=time.time()
for i in range(10):
    th=threading.Thread(target=lajifenlei) #声明线程,注意写方法名,不需要带括号
    th.start() #启动线程
print(time.time()-s_time)


#第一种方式等待子线程
s_time2=time.time()
threads=[]

for i in range(10):
    th2=threading.Thread(target=lajifenlei) #声明线程,注意写方法名,不需要带括号
    th2.start() #启动线程
    threads.append(th2) #把每个线程对象加入list

for t in threads:
    t.join() #等待子线程
print(time.time()-s_time2)


#第二种方法,主线程等待子线程
s_time3=time.time()

for j in range(10):
    th3=threading.Thread(target=lajifenlei) #声明线程,注意写方法名,不需要带括号
    th3.start() #启动线程

while threading.active_count()!=1: #当活跃的线程仅剩1的时候,结束等待,说明所有的子线程均已运行完成,只剩最后一个线程在运行
    pass

print(time.time()-s_time3)

猜你喜欢

转载自www.cnblogs.com/xiaokuangnvhai/p/11261311.html