进程一组资源的集合
线程最小执行单位
单线程 一个人干活 线程和线程之间是相互独立的
多线程,多个人干活
线程是最小的单位 ,一个进程包含多个线程
一个python文件就是一个进程
单线程实现代码
import threading
import time
def ces():
print('打算卫士 ')
time.sleep(2)
def xiyify():
print('洗衣服')
time.sleep(3)
def zuofan():
print('做饭')
time.sleep(1)
star=time.time()
ces()
xiyify()
zuofan()
end=time.time()
print(end-star)
多线程实现代码
import threading
import time
def ces():
print('打算卫士 ')
time.sleep(2)
def xiyify():
print('洗衣服')
time.sleep(3)
def zuofan():
print('做饭')
time.sleep(1)
stars=time.time()
C=threading.Thread(target=ces)
C1=threading.Thread(target=xiyify)
C2=threading.Thread(target=zuofan)
C.start()
C1.start()
C2.start()
end_time=time.time()
print(end_time-stars)
思考多线程有几个线程????????????什么时候用到多线程??/多线程代码有三个线程为什么执行时间才不到1s执行 ?
有四个线程 一个主线程 三个多线程
当执行脚本时间太长需要用到多线程节省时间
因为 我们的代码结果是主线程的时间 想要看到多线程的执行时间就要更改代码,让主线程等多线程执行完毕在执行主线程
import threading
import time
def ces():
print('打算卫士 ')
time.sleep(2)
def xiyify():
print('洗衣服')
time.sleep(3)
def zuofan():
print('做饭')
time.sleep(1)
stars=time.time()
C=threading.Thread(target=ces)
C1=threading.Thread(target=xiyify)
C2=threading.Thread(target=zuofan)
C.start()
C1.start()
C2.start()
#先让你们都干活,干完活了在等待
C.join()#加等待时间等待
C1.join()#加等待时间等待
C2.join()#加等待时间等待
end_time=time.time()
print(end_time-stars)
起一个线程写这么多的代码,那我们起一百个线程,写一百行是不是代码很庞大,这时候需要一个好的方法
import threading,time,random
def exce():
print(threading.current_thread())#看当前哪一个进程在运行
time.sleep(random.randint(1,5))
print('洗衣服')
for i in range(10):#你要起多少线程就写多少
t=threading.Thread(target=exce)
t.start()
这时候思考如何让主线程等待主线程呢
思路获取到当前能存活多少线程 ,获取到了当前的线程数,写一个死循环判断他,等于一的时候,子线程代表运行完了
两种方法
等多个子线程 执行结束,把启动的子线程放到list里 在循环调用t.jion()
import threading,time,random
thread_list=[]
def exce():
print(threading.current_thread())#看当前哪一个进程在运行
time.sleep(random.randint(1,5))
print('洗衣服')
for i in range(10):#你要起多少线程就写多少
t=threading.Thread(target=exce)
thread_list.append(t)
t.start()
for t in thread_list:
t.join()
#第二种方法
import threading,time,random
def exce():
print(threading.current_thread())#看当前哪一个进程在运行
time.sleep(random.randint(1,5))
print('洗衣服')
for i in range(10):#你要起多少线程就写多少
t=threading.Thread(target=exce)
t.start()
while threading.active_count()!=1:
pass