浅谈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标准日志模块logging的使用方法
Nov 01 Python
python实现排序算法
Feb 14 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
python添加菜单图文讲解
Jun 04 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
python gdal安装与简单使用
Aug 01 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
python实现一个猜拳游戏
Apr 05 Python
Python实现敏感词过滤的4种方法
Sep 12 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垃圾回收机制对内存泄露的处理
2013/06/14 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
jQuery中:empty选择器用法实例
2014/12/30 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
Python中元组,列表,字典的区别
2017/05/21 Python
详解python实现线程安全的单例模式
2018/03/05 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
python实现在线翻译功能
2020/03/03 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
iPython pylab模式启动方式
2020/04/24 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
募捐倡议书
2014/04/14 职场文书
防火标语大全
2014/10/06 职场文书
学习保证书100字
2015/02/26 职场文书
2015年行政部工作总结
2015/04/28 职场文书
出生证明范本
2015/06/15 职场文书
超市店长竞聘书
2015/09/15 职场文书
python如何获取网络数据
2021/04/11 Python
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers