并发编程之信号量Semaphore
信号量Semaphore
Semaphore管理一个内置的计数器, 每当调用acquire()时内置计数器-1; 调用release() 时内置计数器+1; 计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。
代码示例:
import random
import time
from threading import Semaphore, current_thread,Thread
sm = Semaphore(3)
def task():
# # 对信号量加锁,一个进程占用则锁池 -1
# sm.acquire()
# print(f'this is a main name {current_thread().name}')
# time.sleep(random.randint(1, 3))
# # 释放信号量锁
# sm.release()
with sm:
print(f'this is a main name {current_thread().name}')
time.sleep(random.randint(1, 3))
if __name__ == '__main__':
for i in range(10):
t = Thread(target=task)
t.start()
# this is a main name Thread-1 (task)
# this is a main name Thread-2 (task)
# this is a main name Thread-3 (task)
# this is a main name Thread-4 (task)this is a main name Thread-5 (task)
#
# this is a main name Thread-6 (task)
# this is a main name Thread-7 (task)
# this is a main name Thread-8 (task)
# this is a main name Thread-9 (task)
# this is a main name Thread-10 (task)
信号量与进程池是完全不同的概念,进程池Pool(4),最大只能产生4个进程,而且从头到尾都只是这四个进程,不会产生新的,而信号量是产生一堆线程/进程

浙公网安备 33010602011771号