欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Python multiprocessing模块介绍

Python multiprocessing模块介绍

2025/9/25 13:00:36 来源:https://blog.csdn.net/qq_27390023/article/details/147256938  浏览:    关键词:Python multiprocessing模块介绍

multiprocessing 是 Python 标准库中的一个模块,用于实现多进程并行计算,可以在多核 CPU 上显著提升程序性能,尤其适用于 CPU 密集型任务。Python 的多线程由于 GIL(全局解释器锁)限制,在进行 CPU 密集型任务时无法真正实现并行。而 multiprocessing 模块通过创建多个子进程,每个子进程拥有独立的 Python 解释器,因此可以实现真正的并行运行。

常用组件一览

组件用途
Process创建单个进程
Pool创建进程池,适合大量任务并行处理
Queue进程间通信(FIFO)
Pipe进程间双向通信
Manager管理共享数据结构
Lock / RLock进程同步,避免资源竞争

常见用法

1. 使用 Process 创建子进程
from multiprocessing import Processdef worker(name):print(f"Hello from {name}")if __name__ == "__main__":p = Process(target=worker, args=("Process-1",))p.start()p.join()

调用 start() 方法启动子进程,调用 join() 方法等待子进程结束。

2. 使用 Pool 创建进程池(适合大规模任务)

from multiprocessing import Pooldef square(x):return x * xif __name__ == "__main__":with Pool(processes=4) as pool:results = pool.map(square, [1, 2, 3, 4, 5])print(results)  # [1, 4, 9, 16, 25]

Pool.map() 类似于内置的 map(),但是会并行运行。

3. imap / imap_unordered(流式并行)
for result in pool.imap_unordered(square, range(10)):print(result)
  • imap() 保持顺序

  • imap_unordered() 不保持顺序(更快)

4. 使用 Queue 进行进程通信
from multiprocessing import Process, Queuedef producer(q):q.put("Data from producer")def consumer(q):print(q.get())if __name__ == "__main__":q = Queue()p1 = Process(target=producer, args=(q,))p2 = Process(target=consumer, args=(q,))p1.start()p2.start()p1.join()p2.join()
5. 使用 Manager 实现共享变量
from multiprocessing import Manager, Processdef worker(shared_list):shared_list.append("hello")if __name__ == "__main__":with Manager() as manager:lst = manager.list()p = Process(target=worker, args=(lst,))p.start()p.join()print(lst)  # ['hello']

注意事项

  • 多进程必须加 if __name__ == "__main__":,防止无限递归。

  • 进程间不共享内存空间,需要通过 QueuePipe 或 Manager 传递数据。

  • 不适合 I/O 密集型任务,I/O 密集可考虑 asyncio 或 threading

适用场景

  • 大规模数据处理:如批量解析结构文件、图像处理、日志分析。

  • 训练模型并行跑实验:多组参数同时启动训练进程。

  • Web 抓取中的页面解析等 CPU 操作

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词