浅谈python3.x pool.map()方法的实质
作者:踏破凌霄城 发布时间:2022-07-30 22:27:30
我使用多进程的一般方式,都是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方法中,可迭代对象传入函数是从前到后逐个提取元素。
来源:http://www.cnblogs.com/zrmw/p/10272034.html


猜你喜欢
- 1.Django默认已经提供了认证系统Auth模块。认证系统包含:用户管理权限用户组密码哈希系统用户登录或内容显示的表单和视图一个可插拔的后
- 假如你目前需要在Microsoft Access数据库中指示不存在数据,可以在“文本”或&l
- 注意:我用的python2.7,大家如果用Python3.0以上的版本,请记得在print()函数哦!如果因为版本问题评论的,不做回复哦!!
- 所谓的CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式。尝试使用CSV格式进行标准化描述之前已经使用了很多年。该csv模块r
- NumPy数组是一个多维数组对象,称为ndarray创建一个numpy数组,如下所示import numpy as npx=np.array
- 事情开始得很简单。MegaWare公司市场部门想要一个新的网站来发布文档,开发团队觉得使用SQL Server 2000数据库作为文档存储仓
- QCalendarWidget 是日历控件。它允许用户以简单和直观的方式选择日期。#!/usr/bin/python3# -*- codin
- 关于Python的格式化字符串,几乎所有接触过Python语言的人都知道其中一种,即使用运算符%,但对于绝大多数初学者来说也仅此而已。因此,
- 本文实例讲述了Python实现监控Nginx配置文件的不同并发送邮件报警功能。分享给大家供大家参考,具体如下:因为项目中经常涉及到多个Ngi
- 前言innodb_data_file_path用来指定innodb tablespace文件,如果我们不在My.cnf文件中指定innodb
- -----最近从github上找了一个代码跑,但是cpu训练的时间实在是太长,所以想用gpu训练一下,经过了一天的折腾终于可以用gpu进行训
- 本章内容,我们主要来讲一下Python内置的HTML解析库HTMLParser模块,基本上也是应用于页面抓取上,假设,我们需要去收集页面上已
- 前言这篇文章给大家讲解的是在vue-cli脚手架中如何配置vue-router前端路由的相关内容,分享出来供打击参考学习,下面来一起看看详细
- WSGI协议首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python
- 使用软件:MySQLMigrationTool 提示数据过大,无法导入。修改my.cnf文件的max_allowed_packet = 10
- 实现需求:从网上(随便一个网址,我爬的网址会在评论区告诉大家,dddd)获取某一年的历史天气信息,包括每天最高气温、最低气温、天气状况、风向
- 2016年9月22日凌晨,微信宣布“小程序”问世,妈的,论坛,博客全是小程序,昨天当之无愧抢了头条,当然只是开始内测了,微信公众平台对200
- 在SQL Server中进行开发会让你身处险地,并且寻找快速解决方案。我们编辑了前十名关于SQL Server开发的常见问题。对常见的针对表
- 关联模型(多对多)多对多关系(抽象)例:一篇文章可能有多个关键词,一个关键词可能被多个文章使用。 关键词表:字段id主键字段keyword关
- centos6自带python2.6版本,根据需要,安装python2.7、easy_install-2.7、pip2.7依赖yum gro