浅谈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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python杀死一个线程的方法
Sep 06 Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
Python基于pillow判断图片完整性的方法
Sep 18 Python
Python使用pymysql小技巧
Jun 04 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
python下10个简单实例代码
Nov 15 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
利用python绘制正态分布曲线
Jan 04 Python
python实现代码审查自动回复消息
Feb 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
smarty实现多级分类的方法
2014/12/05 PHP
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
python编程实现归并排序
2017/04/14 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
python实现超市商品销售管理系统
2019/11/22 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
django中ImageField的使用详解
2020/12/21 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
简短证婚人证婚词
2014/01/09 职场文书
妇产医师自荐信
2014/01/29 职场文书
商业项目策划方案
2014/06/05 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
预备党员介绍人意见
2015/06/01 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书