浅谈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批量下载图片的三种方法
Apr 22 Python
Python复制目录结构脚本代码分享
Mar 06 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
实现python版本的按任意键继续/退出
Sep 26 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
详解用python计算阶乘的几种方法
Aug 14 Python
python opencv调用笔记本摄像头
Aug 28 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
python dataframe NaN处理方式
Dec 26 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
python的dict判断key是否存在的方法
Dec 09 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
PHP错误处理函数
2016/04/03 PHP
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
微信小程序使用npm支持踩坑
2018/11/07 Javascript
vue-router传参用法详解
2019/01/19 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
动态创建类实例代码
2009/10/07 Python
连接Python程序与MySQL的教程
2015/04/29 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
python实现代码统计器
2019/09/19 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
Python面试题集
2012/03/08 面试题
Delphi软件工程师试题
2013/01/29 面试题
电子商务毕业生求职信
2013/11/10 职场文书
教师岗位职责
2013/11/17 职场文书
优秀生推荐信范文
2013/11/28 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
2014年医药代表工作总结
2014/11/22 职场文书