浅谈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爬虫之urllib2使用指南
Nov 05 Python
Python生成器(Generator)详解
Apr 13 Python
简单讲解Python中的闭包
Aug 11 Python
Python实现二叉堆
Feb 03 Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
python3 enum模块的应用实例详解
Aug 12 Python
Python分割训练集和测试集的方法示例
Sep 19 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 Python
Python绘图实现台风路径可视化代码实例
Oct 23 Python
OpenCV-Python实现油画效果的实例
Jun 08 Python
总结python多进程multiprocessing的相关知识
Jun 29 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和XSS跨站攻击的防范
2007/04/17 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
php实现的双向队列类实例
2014/09/24 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
php+mysql数据库查询实例
2015/01/21 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PDO::quote讲解
2019/01/29 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
Position属性之relative用法
2015/12/14 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
angularjs 的数据绑定实现原理
2018/07/02 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python File(文件) 方法整理
2019/02/18 Python
Python创建字典的八种方式
2019/02/27 Python
Django缓存Cache使用详解
2020/11/30 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
个性车贴标语
2014/06/24 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
旅游项目合作意向书
2015/05/08 职场文书