python:线程池创建与使用
在 Python 中,可以使用 multiprocessing.Pool 创建进程池,并调用其 map() 方法来并行处理任务。虽然推荐使用 with 语句(上下文管理器)来自动管理资源(如关闭和 join 进程池),不使用 with,则需要手动调用 close() 和 join() 来确保资源被正确释放。
下面是一个不使用 with 的示例:
import multiprocessing
def square(x):
return x * x
if __name__ == '__main__':
# 创建进程池(默认使用 CPU 核心数)
pool = multiprocessing.Pool()
# 要处理的数据
data = [1, 2, 3, 4, 5]
# 使用 map 分发任务
results = pool.map(square, data)
# 关闭进程池,不再接受新任务
pool.close()
# 等待所有子进程结束
pool.join()
print(results) # 输出: [1, 4, 9, 16, 25]
注意事项:
- 必须调用
pool.close():防止向池中添加更多任务。 - 必须调用
pool.join():等待工作进程终止,否则主程序可能在子进程完成前退出。 - 在 Windows 或 macOS 上,必须将创建 Pool 的代码放在
if __name__ == '__main__':块中,避免递归创建子进程。
关键知识点map:
在 Python 中,map() 是一个内置函数,用于将一个函数应用到一个或多个可迭代对象(如列表、元组等)的每个元素上,并返回一个 map 对象(一种迭代器)。
基本语法:
map(function, iterable)
function:要对每个元素执行的函数。iterable:一个或多个可迭代对象(如 list、tuple 等)。
如果提供多个 iterable,
function必须能接受相应数量的参数。
示例 1:基本用法(单个 iterable)
将列表中的每个数字平方:
def square(x):
return x ** 2
numbers = [1, 2, 3, 4]
result = map(square, numbers)
print(list(result)) # 输出: [1, 4, 9, 16]
也可以使用 lambda 表达式简化:
numbers = [1, 2, 3, 4]
result = map(lambda x: x ** 2, numbers)
print(list(result)) # [1, 4, 9, 16]

浙公网安备 33010602011771号