1. 什么是多进程并行

一般来说,多进程意味着并行运行两个或者多个任务。在Python中我们可以使用python内置的multiprocessing模块来实现这一功能。

我们来举个栗子,假设我们需要运送十个快递从A点到B点,一个快递员一次只能运送一个快递花费时间为十秒钟,如果我们程序是顺序运行的,也就是说完成这项任务我们需要让一个快递员运送十次,那么此时完成这项任务的时间为一百秒;但是如果我们采用多进程处理,假设我们开十个线程,也就意味着此时我们可以同时拥有十个快递员来并行工作,这时我们完成这项任务的耗时仅需要十秒钟即可。

2. 多进程vs多线程


上图直观的显示了多进程和多线程处理的区别。在第一节的例子中我们使用多线程会比较好,但是如果我们的函数需要更多的处理能力和更多的内存,那么使用多进程是理想的,因为对于使用多进程的程序来说,每个子进程都会有一个专属的 CPU 和内存。 因此,如果我们长时间运行的函数需要更多的处理能力和内存,那么我们更应该使用多进程而不是多线程。

3. 多进程实现

讲了这么多文字,很多童鞋可能还是云里雾里。那么我们来举个栗子,从代码层面进行理解吧。。。

3.1 顺序执行

假设我们的搬运逻辑用代码实现如下:

def long_running_function(box_index):time.sleep(10)print("move box {} from A to B ...".format(box_index))return

如果我们使用顺序执行的方式,也就是让一个快递员搬运十次,那么此时的代码逻辑如下:

def test1():time1 = time.time()for index in range(0, 10):long_running_function(index)time2 = time.time()print("time consume {} s".format(time2-time1))

上述模拟代码的输出如下:

move box 0 from A to B ...
move box 1 from A to B ...
move box 2 from A to B ...
move box 3 from A to B ...
move box 4 from A to B ...
move box 5 from A to B ...
move box 6 from A to B ...
move box 7 from A to B ...
move box 8 from A to B ...
move box 9 from A to B ...
time consume 100.050865650177 s

3.2 多进程并行执行

为了实现多进程,我们需要引入multiprocessing包,同时利用Process创建子进程,利用start来启动子进程,利用join函数实现阻塞住主进程等待子进程结束。
上述搬运箱子多进程方式代码实现如下:

import time
import multiprocessing
def test2():time1 = time.time()_processes = []for index in range(0, 10):_process = multiprocessing.Process(target=long_running_function, args=(index,))_process.start()_processes.append(_process)for _process in _processes:_process.join()time2 = time.time()print("time consume {} s".format(time2 - time1))

上述模拟代码的输出如下:

move box 0 from A to B ...
move box 8 from A to B ...
move box 7 from A to B ...
move box 3 from A to B ...
move box 2 from A to B ...
move box 9 from A to B ...
move box 5 from A to B ...
move box 1 from A to B ...
move box 6 from A to B ...
move box 4 from A to B ...
time consume 10.547523975372314 s

4. 参考

本文重点参考了以下链接,详情请戳。。。

链接一
链接二

5. 总结

本文简单介绍了Python中使用multiprocessing来实现多进程并行,并和程序顺序执行做了相应的对比,并给出了相应的代码实现。

您学废了嘛?


关注公众号《AI算法之道》,获取更多AI算法资讯。

Python中的多进程并行简明教程相关推荐

  1. Python中的Assert语句简明教程

    1. 引言 如果你是一个Python新手,那么你可能会在一些代码中看到assert关键字的语句.对于该语句,有人喜欢有人不喜欢,本文重点介绍Assert语句的作用以及什么时候应该使用该语句. 闲话少说 ...

  2. python多线程好还是多协程好_深入浅析python中的多进程、多线程、协程

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  3. Python中使用BeautifulReport形成测试报告教程

    Python中使用BeautifulReport形成测试报告教程 pyton中使用BeautifulReport形成测试报告需要先安装BeautifulReport模块 打开cmd窗口输入 pip i ...

  4. 在Python中使用HTML模版的教程

    在Python中使用HTML模版的教程 转载  2018-02-12   作者:廖雪峰 这篇文章主要介绍了在Python中使用HTML模版的教程,HTML模版也是Python的各大框架下的一个基本功能 ...

  5. Python 中的多进程(进程之间的通信)

    文章目录 在进程之间共享数据 共享内存 服务器进程 进程之间的通信 队列 管道 这篇文章将会讲解在 Python 中使用 多进程模块时在进程之间共享数据和消息传递的概念. 在多处理中,任何新创建的进程 ...

  6. Python中安装PyOpenGL:详细教程

    Python中安装PyOpenGL:详细教程 如果你对Python编程有一定的了解,并且在计算机图形学领域有所涉猎,你可能会使用到PyOpenGL.PyOpenGL是Python的一个OpenGL绑定 ...

  7. python廖雪峰_【Python】python中实现多进程与多线程

    进程与线程 进程(process)就是任务,是计算机系统进行资源分配和调度的基本单位[1].比如,打开一个word文件就是启动了一个word进程. 线程(thread)是进程内的子任务.比如word中 ...

  8. async python两个_【Python】python中实现多进程与多线程

    进程与线程 进程(process)就是任务,是计算机系统进行资源分配和调度的基本单位[1].比如,打开一个word文件就是启动了一个word进程. 线程(thread)是进程内的子任务.比如word中 ...

  9. 你所谓的鸡肋?Python中的多进程、多线程和协程

    本文撰写过程中参考了胡俊峰老师<Python程序设计与数据科学导论>课程的内容. 概念: 并发:一段时间内同时推进多个任务,但不一定要在一个时刻同时进行多个任务. 并行:一段时间内同时推进 ...

最新文章

  1. 3分钟带你理解深度学习中的RNN和LSTM究竟是什么?
  2. 红帽集群套件RHCS四部曲(维护篇)
  3. main函数或者run函数的一个作用
  4. 二十三、 爬取mzsock网站写真社区
  5. 第二版全新博客园win phone 客户端
  6. 如何去除Druid数据监控广告?
  7. 临近失业,如何拯救自己?
  8. 【数字信号去噪】基于matlab中值滤波+奇异值分解(SVD)数字信号降噪【含Matlab源码 1021期】
  9. 基于小米球(Ngrok)实现外网访问
  10. java eclipse参考文献_2019-2020年java毕设论文参考文献.doc
  11. 为微信小程序扩展自定义babel编译功能
  12. 全国大学生英语竞赛C类
  13. wp-bugku-秋名山老司机
  14. 容联云通讯完成发送验证码
  15. 领域分类的问题_别人的问题领域
  16. 易语言 服务端给客户端发弹窗信息源码
  17. Am335x 平台上GSM 3G/4G modem的一些硬件和软件的杂事
  18. Ubuntu 联网 eht0没有问题
  19. 2. 算法 (图灵机到底是个啥 ?)
  20. 微信小程序6位验证码功能实现

热门文章

  1. 机器学习《Machine Learning》----(2)模型评估与选择
  2. 学计算机怎么考药师证,自学考药师证难吗 都考什么
  3. 数码宝贝大冒险 2 再临数码宝贝世界
  4. Reivt:文件中的三维视图没有颜色
  5. android小米定位,Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框示例...
  6. Pulsar Summit Asia 2020 | 新增议题揭秘:Pulsar 2.7.0, 华为云,平安证券, 苏宁等大咖云集...
  7. 新中大、金蝶、用友产品技术比较
  8. 【webrtc0419 注册功能】
  9. excel怎么批量插行_excel中批量插入对应名称的图片,你用了1天,同事2分钟就搞定了...
  10. 【Linux】win11 家庭版通过VMware安装Ubuntu 2022虚拟机