浅谈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的paramiko模块实现远程控制和传输示例
Oct 13 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
对numpy中的where方法嵌套使用详解
Oct 31 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
Python读取xlsx文件的实现方法
Jul 04 Python
使用python画社交网络图实例代码
Jul 10 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
python实现FTP循环上传文件
Mar 20 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
用python开发一款操作MySQL的小工具
May 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生成Flash动画的实现代码
2010/03/12 PHP
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
python算法学习之基数排序实例
2013/12/18 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
对numpy中轴与维度的理解
2018/04/18 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
2014年个人总结范文
2015/03/09 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
工作证明格式范文
2015/06/15 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers