python多线程的实现

入门案例

 1 import threading,time
 2 '''
 3 #线程的创建有两种方式,1.直接调用,2.继承
 4 '''
 5 # def run(n):
 6 #     print('test',n)
 7 # #1.直接调用
 8 # t1 = threading.Thread(target=run,args=(1,))
 9 # t2 = threading.Thread(target=run,args=(2,))
10 # t1.start()
11 # t2.start()
12 # #2.继承
13 # class Mythread(threading.Thread):
14 #     def __init__(self,n):
15 #         super(Mythread,self).__init__()
16 #         self.n = n
17 #     def run(self):
18 #         print('test',self.n)
19 # t1 = Mythread(1)
20 # t2 = Mythread(2)
21 # t1.start()
22 # t2.start()
23 #统计多个线程耗时,考虑到线程的并发执行,所以每个线程各自指向各自的,主线程执行完后会自动结束,并发执行的时间统计思路就是在线程执行后使用jion()方法,类似于java的wait()
24 def run(n):
25     print('thread-',n)
    #为了更加直观的看到多线程执行的效果,我们使用sleep方法
26 time.sleep(2) 27 start_time = time.time() 28 t_list = [] 29 for i in range(50): 30 t = threading.Thread(target=run,args=('{}'.format(str(i)),)) 31 t.start() 32 t_list.append(t) 33 for j in t_list: 34 j.join() 35 end_time = time.time() 36 print('cost time = ',end_time - start_time)
#浅析pythongil机理
python gil lock中文名称叫做全局解释器锁,是python用来实现多线程的机制,c python的多线程在实际运行时实际上是单通道的,
即总是只能使用一核,利用cpu高速的上下文切换实现所谓的多线程的。潜在的危机,共享资源可能与我们预想的不一样。为此我
们来看以下代码在ubuntu上的运行效果:
 1 #线程锁的研究
 2 def run(n):
 3     global num
 4     #lock.acquire() #为加上本句时的运行效果如下图所示,去掉此处#后一切正常
 5     num += 1
 6     print('thread {}'.format(n))
 7     # time.sleep(0.8)
 8     #lock.release() #去掉此处#后一切正常
9 num = 0
10 lock = threading.Lock()
 12 for j in range(100):
13 t = threading.Thread(target=run,args=(j,))
14 t_list.append(t)
15 t.start()
   for k in t_list: #每个线程开始的前提是等待上一个线程返回结果到共享池
  k.join()
 16 print(num)


 


 

posted @ 2017-12-30 19:10  海的味道  阅读(174)  评论(0编辑  收藏  举报