Python threading.Semaphore 控制线程数
2017-06-13 00:00
711 查看
Semaphore 是 Python 内置模块 threading 中的一个类
Semaphore 管理一个计数器,每调用一次 acquire() 方法,计数器就减一,每调用一次 release() 方法,计数器就加一。计时器的值默认为 1 ,计数器的值不能小于 0,当计数器的值为 0 时,调用 acquire() 的线程就会等待,直到 release() 被调用。 因此,可以利用这个特性来控制线程数量
代码示例
输出结果
看输出,说明 Semaphore 确实成功的控制了同一时间内执行任务的线程数量,但是依然创建了 10 个线程。
结论: Semaphore 可以通过计数器控制同一时间内执行任务的线程数量,但不影响线程的创建
更多关于 Semaphore 的详情请点击这里
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的进程线程协程之threading模块(二)Lock,RLock对象以及Semaphore,BoundedSemaphore对象
- python 进行多线程编程,使用Semaphore控制线程数
- python3.6 - threading 多线程编程进阶,线程间并发控制(2)
- 转:Python: threading.local是全局变量但是它的值却在当前调用它的线程当中
- Python模块学习 ---- threading 多线程控制和处理
- Python模块学习 ---- threading 多线程控制和处理
- 生产者和消费者 用Semaphore来控制线程
- python threading获取线程函数返回值
- Python: threading.local是全局变量但是它的值却在当前调用它的线程当中
- Python模块学习 ---- threading 多线程控制和处理
- Python:使用threading模块实现多线程编程八[使用Event实现线程间通信]
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- Python之美[从菜鸟到高手]--threading daemon线程原理解读
- [python][threading][守护线程]
- Python模块整理(四):线程模块threading
- python中threading方式创建的线程的终止
- Python模块学习 ---- threading 多线程控制和处理
- mutex线程控制和信号量semaphore
- Python模块学习 ---- threading 多线程控制和处理
- python的线程处理模块——thread,threading