浅谈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遍历目录的4种方法实例介绍
Apr 13 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
python实现逐个读取txt字符并修改
Dec 24 Python
使用django实现一个代码发布系统
Jul 18 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
Feb 26 Python
python 工具 字符串转numpy浮点数组的实现
Mar 14 Python
基于python实现音乐播放器代码实例
Jul 01 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php多文件上传实现代码
2014/02/20 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
各种快递查询--Api接口
2016/04/26 PHP
php常用数组函数实例小结
2016/12/29 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
服装设计行业个人的自我评价
2013/12/20 职场文书
高一化学教学反思
2014/02/05 职场文书
外国人聘用意向书
2014/04/01 职场文书
个人借款担保书
2014/04/02 职场文书
运动员加油词
2015/07/18 职场文书
法律服务所工作总结
2015/08/10 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Tomcat用户管理的优化配置详解
2022/03/31 Servers
mysql sock文件存储了什么信息
2022/07/15 MySQL