news 2026/6/22 19:15:03

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/6/17 17:49:55

ResNet18物体识别避坑指南:3个常见错误+云端解决方案

ResNet18物体识别避坑指南:3个常见错误云端解决方案 引言 当你第一次尝试用ResNet18做物体识别时,是不是遇到过这些情况:好不容易装好环境,结果CUDA版本报错;跑着跑着突然显存不足;或者训练了半天发现准确…

作者头像 李华
网站建设 2026/6/17 17:49:53

亲测好用2026 TOP9 AI论文网站:专科生毕业论文全攻略

亲测好用2026 TOP9 AI论文网站:专科生毕业论文全攻略 2026年AI论文工具测评:为何需要一份精准榜单? 随着人工智能技术的不断进步,越来越多的专科生开始依赖AI论文网站来辅助完成毕业论文写作。然而,面对市场上五花八门…

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

Qwen2.5-7B-Instruct镜像部署实践:vLLM+Chainlit快速上手

Qwen2.5-7B-Instruct镜像部署实践:vLLMChainlit快速上手 一、业务场景与痛点分析 随着大语言模型在企业级应用中的广泛落地,如何高效地将高性能模型部署为可交互服务成为关键挑战。传统推理框架往往面临吞吐量低、显存占用高、响应延迟大等问题&#xff…

作者头像 李华
网站建设 2026/6/17 17:49:50

SpringBoot+Vue 美发门店管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着美发行业的快速发展,传统门店管理模式逐渐暴露出效率低下、客户管理混乱等问题。信息化管理系统的引入成为提升门店运营效率的关键。美发门店管理系统通过数字化手段整合客户信息、预约管理、员工调度及财务统计等功能,帮助门店实现精细化运营。…

作者头像 李华
网站建设 2026/6/17 17:49:48

从目录到架构:彻底理解 Metasploit Framework 的模块与载荷设计

—— 官方 MSF 源码级视角下的工程哲学与实战路径 引言:为什么“找不到 payload 文件”是一个必然问题? 几乎所有真正深入使用 Metasploit Framework(MSF) 的人,都会在某一个时间点遇到同一个问题: “我在 …

作者头像 李华
网站建设 2026/6/22 0:04:46

智能万能抠图Rembg:内容创作者的秘密武器

智能万能抠图Rembg:内容创作者的秘密武器 1. 引言:智能万能抠图 - Rembg 在数字内容创作日益普及的今天,图像处理已成为设计师、电商运营、短视频制作者乃至普通用户不可或缺的一环。其中,图像去背景(即“抠图”&…

作者头像 李华