浅谈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写的一个简单监控系统
Jun 19 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
Python数据分析库pandas基本操作方法
Apr 08 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
在Pandas中处理NaN值的方法
Jun 25 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
Python加密与解密模块hashlib与hmac
Jun 05 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面向对象分析设计的经验原则
2008/09/20 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
Python元组及文件核心对象类型详解
2018/02/11 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
德国网上药房:Apotal
2017/04/04 全球购物
JPA面试常见问题
2016/11/14 面试题
接口中的方法可以是abstract的吗
2015/07/23 面试题
Linux机考试题
2015/10/16 面试题
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
军训自我鉴定200字
2014/02/13 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
Minikube搭建Kubernetes集群
2022/03/31 Servers