Semaphore 是 Python 内置模块 threading 中的一个类
Semaphore 管理一个计数器,每调用一次 acquire() 方法,计数器就减一,每调用一次 release() 方法,计数器就加一。计时器的值默认为 1 ,计数器的值不能小于 0,当计数器的值为 0 时,调用 acquire() 的线程就会等待,直到 release() 被调用。 因此,可以利用这个特性来控制线程数量
代码示例
from threading import Thread, Semaphore
import time
def test(a):
#打印线程的名字
print(t.name)
print(a)
time.sleep(2)
#释放 semaphore
sem.release()
#设置计数器的值为 5
sem = Semaphore(5)
for i in range(10):
#获取一个 semaphore
sem.acquire()
t = Thread(target=test, args=(i, ))
t.start()
输出结果
Thread-1
0
Thread-2
1
Thread-3
2
Thread-4
3
Thread-5
4
# --- 两秒后 ---
Thread-6
5
Thread-7
6
Thread-8
7
Thread-9
8
Thread-10
9
看输出,说明 Semaphore 确实成功的控制了同一时间内执行任务的线程数量,但是依然创建了 10 个线程。
结论: Semaphore 可以通过计数器控制同一时间内执行任务的线程数量,但不影响线程的创建
更多关于 Semaphore 的详情请点击这里