python3 多线程 (threading) + 锁 (Lock) + 控制线程数量 (Semaphore) 的实例

python3 多线程 (threading) + 锁 (Lock) + 控制线程数量 (Semaphore) 的实例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41287692/article/details/83062253

学习记录:python3 多线程 (threading ) + 锁 (Lock) + 控制线程数量 (Semaphore) 的实例

 

  1.  
    import threading
  2.  
    import time
  3.  
     
  4.  
     
  5.  
     
  6.  
    def sub(num):
  7.  
     
  8.  
    global count
  9.  
     
  10.  
    lock.acquire() #上锁,第一个线程如果申请到锁,会在执行公共数据的过程中持续阻塞后续线程
  11.  
    #即后续第二个或其他线程依次来了发现已经被上锁,只能等待第一个线程释放锁
  12.  
    #当第一个线程将锁释放,后续的线程会进行争抢
  13.  
     
  14.  
    '''线程的公共数据 下'''
  15.  
    print(num)
  16.  
    temp=count
  17.  
    time.sleep(0.001) #模拟大量的io操作
  18.  
    count=temp+1
  19.  
    '''线程的公共数据 上'''
  20.  
     
  21.  
    lock.release() #释放锁
  22.  
     
  23.  
    time.sleep(2)
  24.  
    # 释放信号量,可用信号量加一
  25.  
    threadmax.release()
  26.  
     
  27.  
     
  28.  
     
  29.  
     
  30.  
    start = time.time() #记录程序开始时间
  31.  
     
  32.  
    threadmax = threading.BoundedSemaphore(4) #限制线程的最大数量为4个
  33.  
     
  34.  
    count=0
  35.  
     
  36.  
    lock=threading.Lock() #将锁内的代码串行化
  37.  
     
  38.  
    l=[]
  39.  
     
  40.  
    for i in range(100):
  41.  
    # 增加信号量,可用信号量减一
  42.  
    threadmax.acquire()
  43.  
     
  44.  
    t=threading.Thread(target=sub,args=('123',))
  45.  
     
  46.  
    t.start()
  47.  
     
  48.  
    l.append(t)
  49.  
     
  50.  
    for t in l:
  51.  
     
  52.  
    t.join()
  53.  
     
  54.  
    print(count)
  55.  
     
  56.  
    end = time.time() #记录程序结束时间
  57.  
     
  58.  
    print(end-start) #程序运行时长

 

 
posted on 2019-11-21 12:43  曹明  阅读(1102)  评论(0)    收藏  举报