浅谈python3.x pool.map()方法的实质


Posted in Python onJanuary 16, 2019

我使用多进程的一般方式,都是multiprocessing模块中的Pool.map()方法。下面写一个简单的示例和解析。至于此种方法使用多进程的效率问题,还希望大佬予以指正。

示例:

"""
探索pool.map多进程执行方式的实质
"""

from multiprocessing import Pool
from time import sleep
from datetime import datetime

class forMap:
  def __init__(self):
    self.name = '没啥用的初始化'

  def forPrinit(self, i):
    sleep(i)
    print(i)
    return i ** 2

基本的代码已经写好,下面看看怎么使用多进程去执行。

执行示例1:

if __name__ == '__main__':
  s = datetime.now()
  tt = forMap()
  # 进程池中创建两个进程,调用计算机的两个内核去帮我做事。
  p = Pool(2)

  l = [2, 4, 6]
  rList = p.map(tt.forTest, l)
  print(rList)

  p.close()
  p.join()

  e = datetime.now()
  print('多进程执行时间:', e - s)

运行结果:

2
4
6
[4, 16, 36]
多进程执行时间: 0:00:08.191251

由于在进程池中创建了两个进程,所以代码会调用计算机的两个内核。而列表l中的三个元素中的前两个(“2”和“4”),会依次传入函数中,由计算机内核A和B去执行。当某一个内核执行完,会继续接收下一个传入参数“6”函数。而且内核A执行的函数,只会sleep两秒,所以,传入参数“6”的函数会由内核A去执行。所以A一共执行了2 + 6 为8秒,又由于是并行,所以总的执行时间是8秒(多的那零点几是初始化、赋值、打印等操作)。

执行示例2:

if __name__ == '__main__':
  s = datetime.now()
  tt = forMap()
  # 进程池中创建三个进程
  p = Pool(3)

  l = [2, 4, 6]
  rList = p.map(tt.forTest, l)
  print(rList)

  p.close()
  p.join()

  e = datetime.now()
  print('多进程执行时间:', e - s)

执行结果:

2
4
6
[4, 16, 36]
多进程执行时间: 0:00:06.273263

创建了三个进程 ,并行执行,所以执行时间是6秒

执行示例3:

if __name__ == '__main__':
  s = datetime.now()
  tt = forMap()
  # 进程池中创建三个进程
  p = Pool(3)

  l = [2, 4, 6, 8]
  rList = p.map(tt.forTest, l)
  print(rList)

  p.close()
  p.join()

  e = datetime.now()
  print('多进程执行时间:', e - s)

执行结果:

2
4
6
8
[4, 16, 36, 64]
多进程执行时间: 0:00:10.211451

在列表中添加一个元素,首先内核A、B、C分别执行2, 4, 6。A先结束,所以8也会由A来执行。

执行示例4:

if __name__ == '__main__':
  s = datetime.now()
  tt = forMap()
  # 进程池中创建三个进程
  p = Pool(2)

  l = [2, 4, 8, 6]
  rList = p.map(tt.forTest, l)
  print(rList)

  p.close()
  p.join()

  e = datetime.now()
  print('多进程执行时间:', e - s)

执行结果:

2
4
8
6
[4, 16, 64, 36]
多进程执行时间: 0:00:10.200389

还是创建两个进程,将列表中第3和第4个元素交换位置,执行结果为10秒多,而且返回值也是交换过位置之后的,说明map方法中,可迭代对象传入函数是从前到后逐个提取元素。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python快速从注释生成文档的方法
Dec 26 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
Python 存取npy格式数据实例
Jul 01 Python
python实现ping命令小程序
Dec 28 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
pytorch锁死在dataloader(训练时卡死)
May 28 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
在Pycharm terminal中字体大小设置的方法
Jan 16 #Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 #Python
在pycharm中设置显示行数的方法
Jan 16 #Python
PyCharm设置每行最大长度限制的方法
Jan 16 #Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 #Python
在Pycharm中设置默认自动换行的方法
Jan 16 #Python
pycharm的console输入实现换行的方法
Jan 16 #Python
You might like
初识PHP
2014/09/28 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
vue实现购物车列表
2020/06/30 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
理解Python垃圾回收机制
2016/02/12 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
Java多态性的定义以及类型
2014/09/16 面试题
.NET remoting的两种通道是什么
2016/05/31 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
美术社团活动总结
2014/06/27 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
教师读书活动心得体会
2016/01/14 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android