您的位置:首页 > 编程语言 > Python开发

Python threading.Semaphore 控制线程数

2017-06-13 00:00 711 查看
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 的详情请点击这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python