python线程池调用
时间: 2023-06-28 07:13:03 浏览: 123
在 Python 中,我们可以使用 `ThreadPoolExecutor` 类来创建线程池。
下面是一个简单的例子,展示了如何使用线程池来并发地执行多个任务:
```python
import concurrent.futures
import time
# 定义一个任务函数,用来模拟耗时操作
def task(n):
print(f"开始执行任务 {n}")
time.sleep(2) # 模拟耗时操作
print(f"任务 {n} 执行完毕")
# 创建一个包含 5 个线程的线程池
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# 提交 10 个任务给线程池处理
for i in range(10):
executor.submit(task, i)
```
在上面的例子中,我们创建了一个包含 5 个线程的线程池,并提交了 10 个任务给它处理。每个任务都会执行一个模拟耗时操作,该操作会让线程休眠 2 秒钟。
注意,当我们使用 `ThreadPoolExecutor` 类时,需要使用 `with` 语句来创建一个上下文环境,这样可以确保在任务执行完毕后自动关闭线程池。此外,在提交任务时,我们使用 `executor.submit()` 方法来将任务添加到线程池中。
相关问题
python线程池
### Python 线程池使用方法
#### 创建线程池
为了创建一个线程池,在Python中可以利用`concurrent.futures`模块中的`ThreadPoolExecutor`类。构造此实例时,可以通过传递`max_workers`参数指定线程池中最大允许同时运行的线程数量[^4]。
```python
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=5)
```
#### 提交任务到线程池
一旦有了线程池对象,就可以向其中提交任务了。这可通过调用`submit()`方法完成,它接受目标函数以及任意数量的位置或关键字参数作为输入,并返回一个表示这个操作结果的`Future`对象[^5]。
```python
def task(n):
return n * n
future = executor.submit(task, 10)
result = future.result() # 获取任务的结果
print(result) # 输出: 100
```
#### 使用 `map` 方法批量处理数据
对于需要对一系列项应用相同的操作的情况,可采用`map()`方法。其行为与内置的`map()`相似,但是会在后台自动分配工作给不同的线程去执行。
```python
numbers = [1, 2, 3, 4, 5]
results = list(executor.map(task, numbers))
print(results) # 输出: [1, 4, 9, 16, 25]
```
#### 关闭线程池
当不再需要继续提交新任务时,应该调用`shutdown()`来释放资源,默认情况下会等待所有已提交的任务完成后才真正关闭线程池。
```python
executor.shutdown()
```
### 完整示例代码
下面给出一段完整的例子,演示如何定义一个多线程应用程序来计算列表里各个数目的平方:
```python
from concurrent.futures import ThreadPoolExecutor, as_completed
def square(x):
""" 计算x的平方 """
return x*x
if __name__ == '__main__':
nums = range(8)
with ThreadPoolExecutor(max_workers=4) as exe:
futures = {exe.submit(square, num): num for num in nums}
for fut in as_completed(futures):
try:
res = fut.result()
print(f'Square of {futures[fut]} is {res}')
except Exception as exc:
print(f'Task generated an exception: {exc}')
```
上述代码展示了怎样在一个上下文中管理线程池生命周期,确保即使发生错误也能正常清理资源[^1]。
python线程池 示例
以下是一个简单的Python线程池示例:
```python
import concurrent.futures
def worker(num):
"""线程池中的工作函数"""
print(f"工作线程 {num} 开始执行")
# 这里可以进行一些耗时的任务
print(f"工作线程 {num} 执行完成")
if __name__ == "__main__":
# 创建一个最大线程数为 3 的线程池
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
# 提交 5 个工作任务
for i in range(5):
executor.submit(worker, i)
```
在这个示例中,我们使用了Python标准库concurrent.futures中的ThreadPoolExecutor类来创建一个最大线程数为3的线程池。然后,我们通过executor.submit()方法向线程池中提交了5个工作任务。每个工作任务都会调用worker()函数来执行一些耗时的任务。当线程池中的某个线程完成任务后,它会自动继续执行下一个任务,直到所有任务都完成为止。
阅读全文
相关推荐













