当前位置: 首页 > news >正文

项目代码工程优化之concurrent.futures异步编程(二)

ProcessPoolExecutorconcurrent.futures 模块中的一个类,用于实现多进程并发执行任务。它通过创建和管理一个进程池,将工作负载分配给多个进程,从而提高 CPU 密集型任务的执行效率。与 ThreadPoolExecutor 不同,ProcessPoolExecutor 适用于 CPU 密集型任务,因为它可以绕过 Python 的全局解释器锁(GIL),从而充分利用多核 CPU 的计算能力 。

ProcessPoolExecutor 的基本用法

  1. 创建进程池
    使用 ProcessPoolExecutor 创建一个进程池,可以通过指定 max_workers 参数来设置最大同时运行的进程数。如果不指定,max_workers 默认为 CPU 核心数。

    from concurrent.futures import ProcessPoolExecutorwith ProcessPoolExecutor(max_workers=4) as executor:# 提交任务到进程池futures = [executor.submit(task, i) for i in range(4)]
    
  2. 提交任务
    使用 submit 方法将任务提交到进程池,返回一个 Future 对象。Future 对象可以用来跟踪任务的状态和结果。

    def task(n):return n * nwith ProcessPoolExecutor() as executor:future = executor.submit(task, 3)print(future.result())  # 输出: 9
    
  3. 等待任务完成
    使用 as_completed 函数来迭代 Future 对象,当任务完成时返回结果。

    def task(n):return n * nwith ProcessPoolExecutor() as executor:futures = [executor.submit(task, i) for i in range(4)]for future in as_completed(futures):print(future.result())  # 输出: 0, 1, 4, 9
    
  4. 处理异常
    在任务执行过程中可能会抛出异常,可以通过 Future 对象的 exception() 方法来捕获并处理异常。

    def task(n):if n == 3:raise ValueError("Error occurred")return n * nwith ProcessPoolExecutor() as executor:futures = [executor.submit(task, i) for i in range(4)]for future in as_completed(futures):try:print(future.result())except Exception as e:print(f"An error occurred: {e}")
    
  5. 使用 map 方法
    map 方法可以将函数和可迭代对象映射在一起,异步执行多个任务。

    def task(n):return n * nwith ProcessPoolExecutor() as executor:results = executor.map(task, range(4))for result in results:print(result)  # 输出: 0, 1, 4, 9
    
  6. 设置回调函数
    可以为 Future 对象设置回调函数,当任务完成时自动调用该回调函数。

    def callback(future):print(f"Task completed with result: {future.result()}")def task(n):return n * nwith ProcessPoolExecutor() as executor:futures = [executor.submit(task, i) for i in range(4)]for future in futures:future.add_done_callback(callback)
    

ProcessPoolExecutor 的特点

  • 进程池管理ProcessPoolExecutor 提供了高级 API 来管理进程池和执行并发任务,简化了多进程编程的复杂性 。
  • 资源管理:通过 with 语句可以确保进程池在使用后正确关闭,避免资源泄漏。
  • 异常处理Future 对象提供了 exception() 方法,可以方便地捕获和处理任务执行中的异常 。
  • 回调机制add_done_callback 方法允许注册回调函数,当任务完成时自动调用,增强了程序的灵活性和响应性 。

ProcessPoolExecutor 的适用场景

  • CPU 密集型任务:如科学计算、图像处理、数据加密等,这些任务需要充分利用多核 CPU 的计算能力。
  • 并行计算:如并行排序、并行搜索等,可以显著提高程序的执行效率 。

总结

ProcessPoolExecutorconcurrent.futures 模块中用于实现多进程并发执行任务的类。它通过创建和管理一个进程池,将工作负载分配给多个进程,从而提高 CPU 密集型任务的执行效率。通过 submitmapas_completed 等方法,可以方便地提交任务、等待任务完成和处理任务结果。同时,ProcessPoolExecutor 提供了异常处理和回调机制,增强了程序的健壮性和灵活性。

相关文章:

  • pytorch部分函数理解
  • spark- ResultStage 和 ShuffleMapStage介绍
  • GEO革命:重新定义AI时代的内容规则
  • 外网访问可视化工具 Grafana (Linux版本)
  • 20250528-C#知识:函数简介及函数重载
  • 【组件】跳动的图标 动画
  • Linux软链接的目的
  • 使用nvm use切换版本号,报exit status 5
  • 图解 DeepSeek-R1【译】
  • 人员睡岗检测算法AI智能分析网关V4打造工业/安防/交通等多场景应用方案
  • 2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析
  • 06.概念二:神经网络
  • 阿里云云效对接SDK获取流水线制品
  • mock库知识笔记(持续更新)
  • ⚡ Linux 系统安装与配置 Vim 编辑器(包括 Vim 插件管理器)
  • 【OSS】 前端如何直接上传到OSS 上返回https链接,如果做到OSS图片资源加密访问
  • VTK|Z轴拉伸功能的实现
  • maven项目编译时复制xml到classes目录方案
  • 2025-05-28 Python-List-二分法
  • 第一节 51单片机概述
  • 江苏网站推广网络/百度竞价推广是什么意思
  • 动态网站开发组合/谷歌seo代运营
  • 医疗网站建设方案/上海谷歌seo推广公司
  • 网站建设昆明/百度风云榜排行榜
  • 建站abc口碑/外链代发软件
  • 动态网站开发的语言/台州百度快照优化公司