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)

 



 

posted @ 2018-03-16 17:30  东郭仔  阅读(108)  评论(0)    收藏  举报