简单学习Python多进程Multiprocessing
1.1 什么是 Multiprocessing 多线程在同一时间只能处理一个任务。 可把任务平均分配给每个核,而每个核具有自己的运算空间。 1.2 添加进程 Process 与线程类似,如下所示,但是该程序直接运行无结果,因为IDLE不支持多进程,在命令行终端运行才有结果显示 import multiprocessing as mp def job(a,b): print('abc') if __name__=='__main__': p1=mp.Process(target=job,args=(1,2)) p1.start() p1.join() 1.3 存储进程输出 Queue Python的多进程模块Multiprocessing是Python中用于实现并发执行任务的重要工具,尤其在处理CPU密集型任务时,能充分利用多核CPU的计算能力。多线程在同一时刻只能处理一个任务,而多进程则是通过创建独立的进程来并行执行任务,每个进程拥有自己的内存空间,可以同时在不同的CPU核心上运行。 1.1 **什么是Multiprocessing** Multiprocessing是Python提供的一个标准库,用于实现进程间的通信和同步。与多线程相比,多进程在处理CPU密集型任务时表现更优,因为每个进程都有独立的内存空间,不会受到全局解释器锁(GIL)的限制,能够充分利用多核处理器的优势。 1.2 **创建进程Process** 在Python中,创建进程可以通过`multiprocessing`模块的`Process`类。下面的示例展示了如何创建并启动一个进程: ```python import multiprocessing as mp def job(a, b): print('abc') if __name__ == '__main__': p1 = mp.Process(target=job, args=(1, 2)) p1.start() p1.join() ``` 需要注意的是,由于IDLE不支持多进程,因此在IDLE环境下运行上述代码不会有结果,需要在命令行终端运行。 1.3 **使用Queue存储进程输出** `multiprocessing.Queue`是进程间通信的一种方式,它可以用来传递数据。下面的代码展示了如何在进程中创建结果,并通过Queue传递到主进程: ```python import multiprocessing as mp def job(q): res = 0 for i in range(1000): res += i + i**2 + i**3 q.put(res) if __name__ == '__main__': q = mp.Queue() p1 = mp.Process(target=job, args=(q,)) p2 = mp.Process(target=job, args=(q,)) p1.start() p2.start() p1.join() p2.join() res1 = q.get() res2 = q.get() print(res1 + res2) ``` 1.4 **效率比对threading & multiprocessing** 通过对比多线程和多进程的运行时间,我们可以发现多进程通常在CPU密集型任务上表现更好,因为它能更好地利用多核CPU资源。`threading`模块用于实现多线程,但由于GIL的存在,多线程在Python中并不能实现真正的并行计算,而是通过快速切换线程来实现并发,效率往往低于多进程。 1.5 **使用进程池Pool** `multiprocessing.Pool`是进程池的概念,它允许我们预先设定进程的数量,然后将任务批量提交给进程池处理。下面的例子展示了如何创建一个进程池来并行计算平方值: ```python import multiprocessing as mp def job(x): return x * x def multicore(): pool = mp.Pool(processes=2) # 创建一个进程池,设置CPU核心数为2 res = pool.map(job, range(10)) # 使用map方法,将任务列表传给进程池 print(res) ``` 进程池简化了多进程编程,自动管理进程的创建和销毁,以及任务的分发。 总结来说,Python的Multiprocessing模块提供了创建和管理进程的功能,使得开发者能够编写出能够利用多核CPU的高效程序。多进程适合于CPU密集型任务,而多线程则更适合于I/O密集型任务。了解并熟练使用Multiprocessing,能够极大地提升Python程序的性能。



























- 粉丝: 7
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 记录个人在计算机视觉-AU335-1课程所完成的lab和大作业
- 计算机视觉学习过程中的实战项目代码仓库
- 基于搜索的软件工程:SSBSE 2021会议精选
- 个人在计算机视觉 - AU335-1 课程中完成的 lab 与大作业记录 个人完成计算机视觉 - AU335-1 课程 lab 及大作业情况记录 计算机视觉 - AU335-1 课程个人所完成 lab
- 19幅图解RAID,从入门到精通,一文读懂存储技术RAID技术详解与选择指南:涵盖RAID级别、硬件与软件RAID、缓存技术及新形态RAID卡的应用场景
- CSDN 学院计算机视觉课程的代码实现示例
- 基于搜索的软件工程前沿进展
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 基于深度学习与计算机视觉的 YOLO 大作业设计与实现
- MobaXterm 专业版本工具
- PHP, MySQL和Apache全一册:Web开发入门与实践
- 2021年新版市级、县级国土空间规划用地用海制图规范符号库,直接使用,很方便
- 计算机视觉课程代码实现 - CSDN学院
- opencv-python-headless-4.11.0.86-cp37-abi3-win-amd64.whl
- 【航空航天材料工程】MMPDS-08金属材料性能标准化手册:室温和高温机械性能数据分析与应用


