Python 多进程编程之multiprocessing--Pool
Python 多进程编程之multiprocessing--Pool
----当需要创建的子进程数量不多的时候,可以直接利用multiprocessing 中的Process 动态生成多个进程,
----但是,如果是成百上千个任务,手动创建的话,工作量会很大,此时就会用到multiprocessing 下的Pool
----初始化Pool 时,可以指定一个最大的进程数,当背后的请求提交到Pool 中时,如果池子没有满,那么就会创建一个新的进程来执行该请求. 如果满了(池子中的进程以及达到最大进程数)那么该请求就会等待,直到池子中有进程结束,才会创建新的进程来执行.
from multiprocessing import Pool
import os,time,random #定义一个函数
def download(i):
print("(%d)--ID号为:%d的进程开始执行"%(i,os.getpid()))
t_start = time.time() time.sleep(random.random()*10) t_stop = time.time()
print("(%d)---ID:%d执行完毕,耗时%f秒!"%(i,os.getpid(),t_stop-t_start)) if __name__ == "__main__":
po = Pool(3)#定义一个进程池,最大进程的数量
for i in range(10): #每次循环将会用空闲出来的子进程去调用目录--同步(自加阻塞)
#po.apply(func=download,args=(i,)) #每次循环将会用空闲出来的子进程去调用目录--异步
po.apply_async(func=download,args=(i,)) print("----start----")
po.close()#关闭进程池,关闭后po就不再接收您的请求。
po.join() #等待po中所有的子进程执行完成,必需放在close之后。 print("----end------")
- 添加join()的原因是,
----此方法可能不会在页面打印除任何内容,因为一次执行3个进程
----3个进程执行的时间相差极为短暂,会在打印页面引起冲突,所以不会有任何内容输出 po.apply(func=download,args=(i,)) 执行的结果如下:你会发现是每次执行一个进程.
(0)id号为:25334的进程开始执行
(0)id号25334执行完毕,耗时3.866196秒
(1)id号为:25335的进程开始执行
(1)id号25335执行完毕,耗时3.393492秒
(2)id号为:25333的进程开始执行
(2)id号25333执行完毕,耗时9.758717秒
(3)id号为:25334的进程开始执行
(3)id号25334执行完毕,耗时0.150672秒
(4)id号为:25335的进程开始执行
(4)id号25335执行完毕,耗时8.498094秒
(5)id号为:25333的进程开始执行
(5)id号25333执行完毕,耗时9.061761秒
(6)id号为:25334的进程开始执行
(6)id号25334执行完毕,耗时8.845187秒
(7)id号为:25335的进程开始执行
(7)id号25335执行完毕,耗时6.623793秒
(8)id号为:25333的进程开始执行
(8)id号25333执行完毕,耗时2.530908秒
(9)id号为:25334的进程开始执行
(9)id号25334执行完毕,耗时9.739911秒
------start-------
------end----------- po.apply_async(func=download,args=(i,)) 执行的结果如下:你会发现开始是执行3个进程,之后只要有进程结束,等待的进程就会执行
------start-------
(1)id号为:25313的进程开始执行
(2)id号为:25314的进程开始执行
(0)id号为:25315的进程开始执行
(0)id号25315执行完毕,耗时0.853286秒
(3)id号为:25315的进程开始执行
(3)id号25315执行完毕,耗时5.674426秒
(4)id号为:25315的进程开始执行
(4)id号25315执行完毕,耗时1.449967秒
(5)id号为:25315的进程开始执行
(1)id号25313执行完毕,耗时9.333982秒
(6)id号为:25313的进程开始执行
(2)id号25314执行完毕,耗时9.982127秒
(7)id号为:25314的进程开始执行
(5)id号25315执行完毕,耗时2.919765秒
(8)id号为:25315的进程开始执行
(7)id号25314执行完毕,耗时2.520782秒
(9)id号为:25314的进程开始执行
(6)id号25313执行完毕,耗时6.414589秒
(9)id号25314执行完毕,耗时7.013178秒
(8)id号25315执行完毕,耗时9.927967秒
------end----------
Python 多进程编程之multiprocessing--Pool的更多相关文章
- Python 多进程编程之multiprocessing--Process
Python 多进程编程之multiprocessing 1,Process 跨平台的进程创建模块(multiprocessing), 支持跨平台:windowx/linux 创建和启动 创 ...
- python并发编程之multiprocessing进程(二)
python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. 系列文章 python并发编程之threading线程(一) python并 ...
- Python 多进程编程之fork()
Python实现多进程可以用系统fork()方法和python的multiprocessing类 1,fork()方法是Unix/Linux操作系统提供的,在python的os模块中自带fork(). ...
- python并发编程之Queue线程、进程、协程通信(五)
单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...
- python并发编程之gevent协程(四)
协程的含义就不再提,在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块.由于协程对于操作系统是无感知的,所以其切换需要程序员自己去完成. 系列文章 python并发编程 ...
- python并发编程之asyncio协程(三)
协程实现了在单线程下的并发,每个协程共享线程的几乎所有的资源,除了协程自己私有的上下文栈:协程的切换属于程序级别的切换,对于操作系统来说是无感知的,因此切换速度更快.开销更小.效率更高,在有多IO操作 ...
- python并发编程之threading线程(一)
进程是系统进行资源分配最小单元,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.进程在执行过程中拥有独立的内存单元,而多个线程共享内存等资源. 系列文章 py ...
- Python函数式编程之map()
Python函数式编程之map() Python中map().filter().reduce()这三个都是应用于序列的内置函数. 格式: map(func, seq1[, seq2,…]) 第一个参数 ...
- Python在云端编程之IPython notebook
Python在云端编程之IPython notebook 如果本地编程考虑到Python版本,机器位数,编译环境,科学栈安装等等繁琐的事,弄得你焦头烂额,不如移步云端,省去这些繁琐过程,在云端编程是很 ...
随机推荐
- perl open函数的使用
本文和大家重点讨论一下如何读写Perl文件,主要包括打开.关闭Perl文件,读写Perl文件,Perl文件的状态,命令行参数和打开管道六部分内容,希望通过本文的学习你对读写Perl文件有深刻的认识. ...
- 网络之OSI七层协议模型、TCP/IP四层模型
13.OSI七层模型各层分别有哪些协议及它们的功能 在互联网中实际使用的是TCP/IP参考模型.实际存在的协议主要包括在:物理层.数据链路层.网络层.传输层和应用层.各协议也分别对应这5个层次而已. ...
- python导入requests库一直报错原因总结 (文件名与库名冲突)
花了好长时间一直在搞这个 源代码: 一直报如下错误: 分析原因: 总以为没有导入requests库,一直在网上搜索各种的导入库方法(下载第三方的requests库,用各种命令工具安装),还是报错 后来 ...
- SQLSERVER创建该存储过程时不会出错,但是执行存储过程时报错
创建该存储过程时,不会出错,但是执行存储过程时,会报出下面这样的错误 这是因为在存储过程创建时,它先做语法检查,如果通过了语法检查,它会尝试解析它包含的对象名,如果存在也会解析该对象引用的对象是否存在 ...
- VRay(一)材质基础
专业术语 漫反射(Diffuse reflection)高光反射(Specular reflection)折射(Refraction)菲涅耳反射(Fresnel reflection)次表面散射(Su ...
- 铁板纹理 铁锈Rust
软件:Substance Designer 2017.1.2 这篇文章记录铁锈的制作方法,铁锈效果见图一 图一:铁锈Rust 铁锈的具体制作过程为: 使用BnW Spots 2(Noise)结点生成噪 ...
- sas data infile 语句选项
1)FIRSTOBS=N,从第N行开始读取数据2)OBS=M,到第M行结束数据读取3)MISSOVER:当一行数据读完的时候,不要转到下一行,而是为其余的变量分配缺失值4)TRUNCOVER:变量读取 ...
- 用GDB调试程序(五)
查看运行时数据——————— 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: ...
- Bootstrap关闭当前页
function doBack() { var index = parent.layer.getFrameIndex(window.name); parent.lay ...
- 如何正确实现 Java 中的 HashCode
相等 和 Hash Code 从一般角度来看,Equality 是不错的,但是 hash code 更则具技巧性.如果我们在 hash code上多下点功夫,我们就能了解到 hash code 就是用 ...