浅谈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处理csv数据的方法
Mar 11 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
Python根据区号生成手机号码的方法
Jul 08 Python
Python 常用string函数详解
May 30 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
python迷宫问题深度优先遍历实例
Jun 20 Python
Python图像处理库PIL详细使用说明
Apr 06 Python
什么是Python装饰器?如何定义和使用?
Apr 11 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
一个简单实现多条件查询的例子
2006/10/09 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
javascript 必知必会之closure
2009/09/21 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
python清除字符串里非数字字符的方法
2015/07/02 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
自考生自我鉴定范文
2013/10/01 职场文书
人事专员工作职责
2014/02/22 职场文书
小学生倡议书范文
2014/05/13 职场文书
节约用水演讲稿
2014/05/21 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书