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

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

 

发表评论

邮箱地址不会被公开。 必填项已用*标注