day9-继承式多线程
一、前言
之前,我们只是简单的介绍了多线程演示,也通过时间设置看出来了,多线程和单线程的不同。现在我们进行更深入的了解,来聊一聊,另外一种多线程方式,继承式多线程,和一个多线程的等待。
二、继承式多线程
2.1、定义
说明:继承式多线程是自己定义类,取继承theading.Tread这个类,通过启动,取执行run(方法名必须是run) 方法中的代码。
1 import time,threading 2 3 class Mythread(threading.Thread): 4 def __init__(self,n): 5 super(Mythread,self).__init__() 6 self.n=n 7 8 def run(self): 9 print("running task",self.n) 10 11 t1 =Mythread("t1") 12 t2=Mythread("t2") 13 t1.start() 14 t2.start()
三、启动多个线程
3.1、启动多个线程
说明:我们这边为了方便实验,就启动5个线程吧,暂时不启动那么多,并且计算一下时间。那有些同学说了,你为啥不启动1000个线程或者更多一点的线程。这边注意了:你的计算机是4核的,它能干的事情,就是4个任务。你启动的线程越多,就代表着要在这个很多线程之间进行上下文切换。相当于我有一本书,我只看了半页,因为cpu要确保每个人都能执行。也就是说我一本说我要确保你们每一位同学都能看到,那就相当于每个人执行的时间非常少。我把这本说拿过来,一下子又被第二个人,第三个人拿走了。所以就导致所有的人都慢了,所以说你的线程启动1000,启动10000就没有意义了,导致机器越来越慢,所以要适当设置。下面我们就来看看一下子启动多个线程的例子,例子如下:
1 import threading 2 import time 3 4 def run(n): 5 print("task",n) 6 time.sleep(2) #代表处理某个功能代码需要2秒 7 8 9 # t1= threading.Thread(target=run,args=("t1",)) 10 # t2= threading.Thread(target=run,args=("t2",)) 11 # t1.start() 12 # t2.start() 13 starttime=time.time() 14 for i in range(50): 15 t=threading.Thread(target=run,args=("t{}".format(i),)) 16 t.start() 17 print(time.time()-starttime) #默认情况,主线程不会等子线程执行完成,所有测的时间有问题,需要设置主线程需要等待子线程的执行结果,这样就能测试所有子线程执行完成。
#怎么设置等待执行结果呢?请看下面搞例子
1 import threading 2 import time 3 4 def run(n): 5 print("task",n) 6 time.sleep(2) #代表处理某个功能代码需要2秒 7 8 9 # t1= threading.Thread(target=run,args=("t1",)) 10 # t2= threading.Thread(target=run,args=("t2",)) 11 # t1.start() 12 # t2.start() 13 starttime=time.time() 14 t_obj=[] #先定义一个空列表 15 for i in range(50): 16 t=threading.Thread(target=run,args=("t{}".format(i),)) 17 t.start() 18 t_obj.append(t) #把实例加入列表。 19 20 for n in t_obj: #循环列表, 21 n.join() #.join() 相当于 wait() 等待线程结束, 22 print(time.time()-starttime)

浙公网安备 33010602011771号