说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 Python 中,进程池(multiprocessing.Pool)是一种管理和分发进程的方法,用于简化并行任务的管理。它能够有效利用多核 CPU 的优势,以并行的方式执行任务,特别适合于需要大量并行计算的场景。
在 Python 的 multiprocessing 模块中,进程池(Pool)用于方便地管理和复用多个进程,从而避免频繁地创建和销毁进程,提高程序的性能和效率。
进程池的主要原理是创建一定数量的进程并保持它们处于就绪状态。当有任务需要执行时,将任务分配给进程池中的空闲进程。如果所有进程都在忙碌,任务会在队列中等待,直到有进程空闲出来。
使用场景包括:
即:
构造方法:
Pool(processes=None, initializer=None, initargs=())
参数:
常用方法:
apply(func, args=(), kwds={})
: 同步执行任务。apply_async(func, args=(), kwds={}, callback=None, error_callback=None)
: 异步执行任务,支持回调函数处理结果或异常。map(func, iterable, chunksize=None)
: 将函数映射到可迭代对象上,返回结果列表。map_async(func, iterable, chunksize=None, callback=None, error_callback=None)
: 异步版本的 map 方法。close()
: 关闭进程池,不再接受新的任务。terminate()
: 立即终止所有进程。join()
: 等待所有进程执行结束。示例如下:
from multiprocessing import Pool
import os
import time
def task(num):
print(f'进程 {os.getpid()} 执行任务 {num}')
time.sleep(1)
return f'任务 {num} 完成'
if __name__ == '__main__':
# 创建进程池,默认使用 CPU 核心数
with Pool() as pool:
# 使用 map 方法同步执行任务
results = pool.map(task, range(5))
print(results)
# 使用 apply_async 方法异步执行任务
async_results = [pool.apply_async(task, (i,)) for i in range(5)]
results = [res.get() for res in async_results]
print(results)
更新时间:2024-06-30 19:33:44 标签:python 进程 multiprocessing 进程池