Python:使用线程池
时间: 2024-06-14 21:02:36 浏览: 190
Python 提供了强大的并发处理能力,其中 `concurrent.futures` 模块是实现多线程和多进程编程的重要工具之一。线程池(ThreadPoolExecutor)是 `concurrent.futures` 中的一个核心组件,它可以帮助管理一组可重用的工作线程,提高执行效率和资源利用率。
线程池的基本用法包括以下几个步骤:
1. **导入模块**:
```python
from concurrent.futures import ThreadPoolExecutor
```
2. **创建线程池**:
```python
with ThreadPoolExecutor(max_workers=5) as executor: # max_workers设定线程数量
future_list = []
```
`max_workers` 参数设置线程池中最多可以同时执行的任务数。
3. **提交任务**:
```python
for task in tasks: # tasks是一个包含待执行函数的任务列表
future = executor.submit(task)
future_list.append(future)
```
`submit` 函数将任务提交给线程池,返回一个 `Future` 对象,代表异步操作的结果。
4. **等待任务完成并获取结果**:
```python
for future in concurrent.futures.as_completed(future_list):
try:
result = future.result()
print(f"Task {future} completed with result: {result}")
except Exception as exc:
print(f"Exception: {exc}")
```
`as_completed` 函数会按完成顺序返回 `Future` 对象,我们可以通过 `result()` 获取实际的结果。
线程池的优点包括:
- 避免频繁创建和销毁线程,提高了效率
- 内部有线程管理和调度机制,可以自动调整任务的执行顺序
- 可以限制并行度,防止过多的线程导致系统资源消耗过大
然而,需要注意的是,线程池并不适合I/O密集型任务,因为线程之间的切换开销较大。对于这类任务,`asyncio` 库通常更合适。
阅读全文