它由线程池管理器、工作队列和线程池线程组成。线程池的基本概念是,在应用程序启动时创建一定数量的线程,并将它们保存在线程池中。当需要执行
时间: 2024-08-09 18:01:39 浏览: 49
线程池管理器负责控制线程的生命周期与资源分配,主要功能包括:
1. **创建线程**:在应用程序启动时预创建固定数量的线程并放入线程池。
2. **任务调度**:接收从外部传入的任务(通常通过工作队列),并将这些任务分发给线程执行。
3. **线程复用**:已有的空闲线程可以重复使用,避免频繁创建和销毁线程带来的性能开销。
4. **容量限制**:线程池具有一定的容量上限,超过此上限的新任务会被暂时排队等待线程释放。
5. **自动回收**:当长时间不使用的线程达到一定的超时阈值,可能会被自动回收以节省资源。
### 示例代码 - 使用`threading`库实现线程池
```python
import threading
from queue import Queue
import time
# 线程执行的函数
def worker_function(q):
while True:
task = q.get()
if task is None:
break
process_task(task)
q.task_done()
# 这里定义任务处理逻辑
def process_task(task):
time.sleep(1) # 模拟耗时操作
result = task * 2
print(f"Processed {task} -> {result}")
# 初始化线程池和任务队列
num_threads = 5
q = Queue(num_threads)
threads = []
for _ in range(num_threads):
t = threading.Thread(target=worker_function, args=(q,))
t.start()
threads.append(t)
# 提交任务到队列
tasks = [i for i in range(10)]
for task in tasks:
q.put(task)
# 等待所有任务完成
q.join()
# 完成所有线程
for _ in range(num_threads):
q.put(None)
# 等待最后一个线程结束
for t in threads:
t.join()
```
这个简单的示例展示了如何使用Python的`threading`模块和`queue.Queue`来创建和管理一个线程池。每个线程不断地从队列中取任务执行,直到收到`None`标志为止,表示无更多任务可做。
---
阅读全文