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)

 

posted @ 2016-12-24 18:02  someOneHan  阅读(142)  评论(0编辑  收藏  举报