You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用multiprocessing做并行处理几乎未降低耗时如何优化

第一次并行方案提速不明显的原因

  • 任务粒度过大,核心利用率低:你将两个DataFrame的处理各打包为一个单独任务分配给两个进程,子进程内部调用ser.apply仍是单线程逐行执行,仅用到2个CPU核心,剩余硬件资源完全闲置,且两个进程同时运行时会争抢CPU缓存、内存带宽,反而会拖慢单任务执行速度。
  • 跨进程通信开销过高:multiprocessing.Manager的共享字典依赖独立的管理进程做数据中转,你需要将完整的处理后Series从子进程传回主进程,大体积Pandas对象的序列化、反序列化和跨进程传输开销,吃掉了大部分并行节省的时间。
  • 重复初始化开销:两个子进程会各自加载一次pos_tag依赖的词性标注模型,额外增加了无效耗时。

最终Pool方案达到15秒耗时的原理

你的最终实现将单个DataFrame的所有文本行拆分为独立小任务,分发到所有可用CPU核心并行处理,原本单线程跑15秒才能完成的单个DataFrame处理任务,分散到多核心同时执行后耗时大幅降低;即使两个DataFrame的处理串行执行,总耗时也能达到15秒的预期值。该方案规避了前一版本的所有缺陷:

  1. 充分利用了全部CPU核心,单任务处理效率拉满
  2. 无需使用Manager传递大对象,Pool.map内置的IPC机制开销远低于共享字典
  3. 进程池初始化时就会完成所有子进程的模型加载,无需重复加载资源

pos_tag本身是纯CPU密集型计算任务,没有全局锁限制,完全可以通过多进程实现近似线性的提速,你的最终实现已经达到了最优优化效果。

内容的提问来源于stack exchange,提问作者Alaa M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:54:03