threading_semaphore_demo

 1 import threading, time
 2 
 3 '''
 4 信号量管理一个表示release()调用数减去的计数器acquire()调用的数量,加上一个初始值。
 5 直到它可以返回而不需要做计数器负的,acquire()方法阻塞。如果未指定,值默认为1。  稀缺资源个设计,如:数据库连接池,线程池
 6 '''
 7 semaphore = threading.Semaphore(3)
 8 
 9 
10 class MyThread(threading.Thread):
11     def __init__(self, name):
12         super().__init__()
13         self.name = name
14 
15     def run(self):
16         '''
17         当没有参数时调用:如果内部计数器大于输入为0,递减1,立即返回。
18         如果是零在进入时,阻塞,等待其他线程调用release()到让它大于0。
19         这是通过适当的联锁来完成的如果多个acquire()调用被阻塞,那么release()将只唤醒一个
20 
21         :return:
22         '''
23         if semaphore.acquire():
24             print(self.name, 'had got resource')
25             time.sleep(1)
26         semaphore.release()
27         print(self.name, 'had released resource')
28 
29 
30 if __name__ == '__main__':
31     ths = [MyThread(str(i) + 'Sema') for i in range(6)]
32     for th in ths:
33         th.start()

 

posted on 2018-08-15 01:42  jovelove  阅读(140)  评论(0)    收藏  举报