线程池是Python中进行并发编程的一种重要方式。线程池可以有效地管理线程资源,满足一定的并行执行任务。
使用线程池的好处是:
- 重用线程,避免反复创建和销毁线程的开销。
- 有限制地创建线程,防止创建过多线程消耗系统资源。
- 可以同时执行多个任务,提高程序响应。
Python中主要有两种方式实现线程池:
- 使用
multiprocessing
模块的Pool
类:
- 实现简单的线程池功能,可以执行函数或自定义callable对象。
- 用法:
from multiprocessing import Pool
def func(x):
return x*x
if __name__ == '__main__':
with Pool(5) as p: # 设置线程池中线程数量为5
results = p.map(func, [1, 2, 3])
print(results) # [1, 4, 9]
- 使用
concurrent.futures
模块的ThreadPoolExecutor
类:
- 实现更丰富的线程池功能,可以执行任意可调用对象,支持
Future
对象进行结果获取。 - 用法:
from concurrent.futures import ThreadPoolExecutor
import time
def func(x):
time.sleep(2)
return x*x
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=5) as executor:
results = executor.map(func, [1, 2, 3])
for result in results:
print(result) # Prints [1, 4, 9] after waiting
在上例中:
- 两个线程池类都可以设置线程数量,重用线程执行任务。
- p.map()和
executor.map()
方法可以将参数列表中的任务分配给线程池执行。 - results可以获取执行结果,实现并行计算。