浅谈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实现的rsa加密算法详解
Jan 24 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
Python实现修改文件内容的方法分析
Mar 25 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
利用python中集合的唯一性实现去重
Feb 11 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
pygame实现弹球游戏
Apr 14 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 Python
python通过函数名调用函数的几种方法总结
Jun 07 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
Javascript !!的作用
2008/12/04 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python Django的web开发实例(入门)
2019/07/31 Python
wxpython绘制音频效果
2019/11/18 Python
荷兰电脑专场:Paradigit
2018/05/05 全球购物
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
《寓言两则》教学反思
2014/02/27 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
财务人员个人工作总结
2015/02/27 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
学生会主席任命书
2015/09/21 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang