浅谈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
猜你喜欢
- import 机制功能Python 的 import 机制基本上可以切分为三个不同的功能:Python运行时的全局模块池的维护和搜索;解析与
- 如下所示:# coding:utf-8import shapefilew = shapefile.Writer()w.autoBalance
- 目的:JS+ASP打造无刷新新闻列表,下图所示的新闻列表相信大家并不少见,包括新闻的分页功能,本文要介绍的就是各分页间的切换方式。传统的方法
- PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, .
- 如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提
- 目录Python3 面向对象一丶面向对象技术简介对象可以包含任意数量和类型的数据。2.Python面向对象的三大特性一、继承 二、
- 前几天,Opera宣布其用户已经超过1亿——桌面版和手机版均超过5000万。Opera Mini是一个很优秀的手机浏览器,对手机用户而言,O
- JavaScript 读取、删除 Cookie 的函数* * WebFXCookie class */ fun
- 经常在网站上看到诸如www.abc.com/?news或者www.abc.com/?id=123这样的网址,一开始觉得很神秘,其实现在看多了
- 代码如下:<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001&quo
- NumPy数组(2、数组的操作)基本运算数组的算术运算是按元素逐个运算。数组运算后将创建包含运算结果的新数组。>>> a=
- 需要准备的环境:一个B站账号,需要先登录,否则不能查看历史弹幕记录联网的电脑和顺手的浏览器,我用的ChromePython3环境以及requ
- 使用 NetBox 可以方便的将 asp 应用编译成为独立运行的执行程序,完全摆脱 iis 的束缚,在几乎所有的 Windows
- 前言在《设计模式》一书中工厂模式提到了:工厂方法模式(Factory Method)抽象工厂模式 (Abstract Factory)但是在
- 本文介绍了网页运行代码框(runCode), 复制代码框(copyCode), 保存代码框(saveCode),的实现方法。javascri
- 跑代码时,在命令行给python程序传入bool参数,但无法传入False,无论传入True还是False,程序里面都是True。下面是代码
- Python提供了一些内建函数用于基本对象类型:cmp(),repr(),str(),type()和等同于repr()的('
- 实现效果效果如图,只识别一定距离内的物体哈哈哈哈哈哈哈哈哈,但我不知道这有什么用实现代码import pyrealsense2 as rsi
- Python实现截屏的函数# -*- coding: cp936 -*- import time,Image import os, win3
- 数据准备moduls.py# 构建表结构from django.db import models# 表app01_publishclass