python 线程之threading(五)
在学习了Event和Condition两个线程同步工具之后还有一个我认为比较鸡肋的工具 semaphores
1. 使用semaphores的使用效果和Condition的notify方法的效果基本相同。每次只能通知一个阻塞线程继续运行
2. 信号量同步基于内部计数器,每调用一次acquire(),计数器减1;每调用一次release(),计数器加1.当计数器为0时,acquire()调用被阻塞
1 import threading 2 import time 3 4 def countdown(n, sema): 5 while n > 0: 6 n -= 1 7 sema.acquire() 8 print('current countdown:',n) 9 10 11 def countup(n, sema): 12 while n < 100: 13 n += 1 14 sema.acquire() 15 print('current countup:',n) 16 17 sema = threading.Semaphore() 18 threading.Thread(target=countdown,args=(100, sema)).start() 19 threading.Thread(target=countup,args=(0, sema)).start() 20 for i in range(100): 21 sema.release() 22 time.sleep(3)