Python多进程Multiprocessing实战:从入门到Queue使用

1 下载量 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`等工具,开发者可以编写出更高效的多进程程序。