浅谈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 相关文章推荐
linux下python抓屏实现方法
May 22 Python
分析Python读取文件时的路径问题
Feb 11 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
Python动态语言与鸭子类型详解
Jul 01 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
python中update的基本使用方法详解
Jul 17 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
python二维键值数组生成转json的例子
Dec 06 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
OpenCV 之按位运算举例解析
Jun 19 Python
python通过opencv调用摄像头操作实例分析
Jun 07 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
php4的session功能评述(一)
2006/10/09 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
分享PHP守护进程类
2015/12/30 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
python爬虫的工作原理
2017/03/05 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
淘宝网店营销策划书
2014/01/11 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
小学庆六一活动方案
2014/02/28 职场文书
大学生个人求职信
2014/06/02 职场文书
车间统计员岗位职责
2015/04/14 职场文书
2015年司机工作总结
2015/04/23 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA