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]
posted @ 2025-12-24 12:00  chenlight  阅读(13)  评论(0)    收藏  举报  来源