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币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于Android的社交分享平台的设计论文.doc
- 网络宣传管理工作总结.docx
- 董老师研发多项目管理.doc
- 基因工程的步骤.ppt
- 国际货物买卖法MicrosoftPowerPoint演示文稿.pptx
- 金蝶软件初始化准备及基础资料编码规则培训.ppt
- 软件售后服务人员提成方案附表.docx
- 设施网络规划与物流管理.pptx
- 网络侵权的界定是什么?.doc
- 基于MATLAB彩色图像及增强处理设计方法.doc
- 项目管理人员安全生产责任制考核记录表.doc
- 天骄联盟网网络推广策划书.doc
- 中小企业会计信息化综述.doc
- 门户网站Web及应用服务器加速及负载均衡方案.doc
- 信息系统项目管理师九大项目管理知识点整合.pdf
- 根源性创新与计算机产业.ppt


