news 2026/4/22 15:08:54

python 多进程apply_async、map_async、pool.imap的用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 多进程apply_async、map_async、pool.imap的用法

想要系统掌握 Python 多进程模块multiprocessing.Poolapply_asyncmap_asyncimap这三个核心方法的使用语法、核心差异、适用场景和实战示例,从而根据实际需求选择合适的多进程并发方式,提升程序执行效率。


前置基础

在讲解这三个方法前,先明确核心前提:

  1. multiprocessing.Pool(进程池)用于管理一组子进程,避免频繁创建 / 销毁进程的开销;
  2. 「同步」方法(如applymap)会阻塞主进程,直到子进程执行完成;「异步」方法(如apply_asyncmap_async)不会阻塞,可继续执行主进程代码;
  3. Windows 系统中,多进程代码必须放在if __name__ == "__main__":块中(避免递归创建子进程),Linux/macOS 无强制要求,但建议统一写法;
  4. 进程间数据隔离:子进程无法修改主进程的变量,结果需通过返回值获取。

一、apply_async:异步执行单个任务

1. 核心作用

异步提交单个任务到进程池,主进程不阻塞,可继续执行其他逻辑;支持传参、回调函数(任务完成后自动调用)。

2. 语法

python

pool.apply_async(func, args=(), kwds={}, callback=None, error_callback=None)
参数说明
func子进程要执行的函数
args传给func的位置参数(元组)
kwds传给func的关键字参数(字典)
callback可选,任务成功执行后调用的回调函数(参数为func的返回值)
error_callback可选,任务执行出错时调用的回调函数(参数为异常对象)

3. 实战示例

python

import multiprocessing import time # 子进程执行的函数 def task(num): time.sleep(1) # 模拟耗时操作 return f"任务{num}完成,进程ID:{multiprocessing.current_process().pid}" # 回调函数(任务成功后执行) def success_callback(result): print(f"回调函数:{result}") # 错误回调函数 def error_callback(e): print(f"任务出错:{str(e)}") if __name__ == "__main__": # 创建进程池(指定4个工作进程) pool = multiprocessing.Pool(processes=4) # 异步提交单个任务 result_obj1 = pool.apply_async(task, args=(1,), callback=success_callback) result_obj2 = pool.apply_async(task, args=(2,), callback=success_callback) # 提交一个会出错的任务(测试错误回调) result_obj3 = pool.apply_async(task, args=("错误参数",), error_callback=error_callback) # 主进程继续执行(不阻塞) print("主进程:所有任务已提交,等待子进程执行...") # 必须关闭进程池 + 等待所有子进程完成(否则主进程退出,子进程会被强制终止) pool.close() pool.join() # 也可通过result_obj.get()获取单个任务的返回值(会阻塞直到任务完成) # print(result_obj1.get())
输出(顺序可能因进程调度略有不同)

plaintext

主进程:所有任务已提交,等待子进程执行... 回调函数:任务1完成,进程ID:12345 回调函数:任务2完成,进程ID:12346 任务出错:invalid literal for int() with base 10: '错误参数'

4. 适用场景

  • 需要逐个提交任务,且每个任务参数 / 逻辑可能不同;
  • 需为单个任务设置成功 / 失败回调;
  • 任务数量少,或任务提交时机不固定(如动态生成任务)。

二、map_async:异步批量执行可迭代任务

1. 核心作用

异步提交一组可迭代任务(如列表、元组)到进程池,功能等价于map()的异步版本;所有任务的参数来自可迭代对象,结果按输入顺序返回,支持回调函数。

2. 语法

python

pool.map_async(func, iterable, chunksize=None, callback=None, error_callback=None)
参数说明
func子进程要执行的函数(仅接收单个参数,由iterable的元素传入)
iterable可迭代对象(如列表),每个元素作为func的参数
chunksize可选,分块大小(大数据集时设置可提升效率,默认自动分块)

3. 实战示例

python

import multiprocessing import time def task(num): time.sleep(1) return f"任务{num}完成,进程ID:{multiprocessing.current_process().pid}" def batch_callback(results): # 回调函数的参数是所有任务的结果列表(按输入顺序) print("批量回调:所有任务完成,结果如下:") for res in results: print(res) if __name__ == "__main__": pool = multiprocessing.Pool(processes=4) # 异步批量提交任务(iterable为列表[1,2,3,4]) result_obj = pool.map_async(task, [1,2,3,4], callback=batch_callback) print("主进程:批量任务已提交,等待执行...") pool.close() pool.join() # 也可通过result_obj.get()获取结果列表(按输入顺序) # print(result_obj.get())
输出

plaintext

主进程:批量任务已提交,等待执行... 批量回调:所有任务完成,结果如下: 任务1完成,进程ID:12345 任务2完成,进程ID:12346 任务3完成,进程ID:12347 任务4完成,进程ID:12348

4. 适用场景

  • 批量执行相同逻辑的任务,参数来自可迭代对象;
  • 需异步执行且关注结果顺序;
  • 任务数量适中,可一次性加载到内存。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 20:51:26

ResNet18模型监控:低成本性能分析平台

ResNet18模型监控:低成本性能分析平台 引言 作为一名机器学习工程师(MLE),你是否经常遇到这样的困扰:训练好的ResNet18模型部署后,需要持续监控其性能表现,但长期占用公司宝贵的GPU资源又显得…

作者头像 李华
网站建设 2026/4/19 16:51:39

基于AI的11项论文创作工具,支持LaTeX排版与内容优化

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数,兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化,语义保留佳 是 格式统一化 askpaper 降重降AI一体,20分钟快速响应 是 初稿优化 秒篇 人类特…

作者头像 李华
网站建设 2026/4/17 16:40:11

JL — AC695X — 按键调试记录

本篇记录一下在开发按键中的遇到的一些问题: 业务需求是实现如下的按键功能:【AD按键】 蓝牙模式:按键序号单击长按长按保持KEY1模式切换开关机开关机KEY2上一曲音量-音量-KEY3下一曲音量音量KEY4空TWS连接断开空KEY5暂停/播放蓝牙连接/断开空…

作者头像 李华
网站建设 2026/4/19 1:38:56

没GPU怎么学ResNet18?云端镜像1小时1块,随用随停

没GPU怎么学ResNet18?云端镜像1小时1块,随用随停 1. 为什么你需要云端GPU来学习ResNet18 作为编程培训班的学员,当你第一次接触ResNet18这样的深度学习模型时,最头疼的问题可能就是:我的破笔记本根本跑不动啊&#x…

作者头像 李华
网站建设 2026/4/17 22:56:41

导师推荐!2026本科生必用AI论文网站TOP10测评

导师推荐!2026本科生必用AI论文网站TOP10测评 2026年本科生必备AI论文网站测评:如何挑选高效写作助手 随着人工智能技术的不断发展,AI论文辅助工具已经成为高校学生提升写作效率、优化内容质量的重要帮手。然而,面对市场上琳琅满目…

作者头像 李华
网站建设 2026/4/20 7:27:33

AI抠图也能本地运行?体验工业级Rembg稳定版镜像

AI抠图也能本地运行?体验工业级Rembg稳定版镜像 你是否曾为一张产品图背景杂乱而苦恼?是否在制作电商详情页时,因手动抠图耗时费力而效率低下?传统PS抠图不仅依赖操作技巧,面对复杂边缘(如毛发、透明物体&…

作者头像 李华