Python多进程Multiprocessing实战:从入门到Queue使用
52 浏览量
更新于2024-08-28
收藏 87KB PDF 举报
"这篇教程介绍了Python的多进程模块Multiprocessing,包括基础知识和实践应用。"
在Python编程中,处理大量数据或执行复杂计算时,单线程的性能往往受限于CPU的核数。为了充分利用多核处理器的计算能力,Python提供了`multiprocessing`模块,允许我们创建并管理多个独立的进程,每个进程都有自己的内存空间,可以同时执行不同的任务,从而提高程序的执行效率。
1.1 什么是Multiprocessing
多线程虽然可以在同一时间内看似处理多个任务,但实际上是通过快速切换线程上下文来实现的,这被称为并发执行。而在多进程环境下,操作系统会真正地分配CPU核心来同时运行不同的进程,每个进程拥有独立的内存空间,因此可以实现并行计算,提高执行速度,特别是在需要大量计算的任务中。
1.2 添加进程Process
在Python中,创建多进程可以通过`multiprocessing`模块的`Process`类实现。创建一个进程的基本步骤是定义一个函数(通常称为工作函数),然后使用`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的并行计算能力。
`multiprocessing`模块是Python中实现并行计算的重要工具,尤其适用于需要高效利用多核CPU资源的情况。通过理解多进程的工作原理和正确使用`Process`及`Queue`等工具,开发者可以编写出更高效的多进程程序。
2020-09-20 上传
2022-04-12 上传
2023-06-28 上传
2020-09-21 上传
2020-12-24 上传
2020-12-20 上传
点击了解资源详情
点击了解资源详情
2023-05-05 上传
weixin_38695751
- 粉丝: 7
- 资源: 961
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录