Python多进程-进程池
进程池可以减轻多进程对CPU的负担
把一个进程序列放入进程池,使用的时候,就会在进程池中取进程
如果进程池中没有进程了,脚本就会等待,直到进程池中有可用进程
进程池生成的子线程,不能直接运行,要放入进程池后才可以运行
串行
下面这个例子是一个串行的进程池,
通过for循环生成了14个子进程,但是进程池只允许5个进程
运行情况是这样的:
把生成的14个子进程的前5个进程放入进程池,进程池按照串行一个一个地执行这5个进程,每当这5个进程有一个执行完的时候,后面剩下的9个子进程就会放入一个进程到进程池里
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" from multiprocessing import Pool
import time,os def Test(i):
time.sleep(2)
print ("In process",i,":",os.getpid()) if __name__ == '__main__':
pool = Pool(processes=5) #允许进程池同时放入5个进程,并让cpu运行这5个进程 for i in range(14):
pool.apply(func=Test,args=(i,)) #串行 print("Processes Run over") pool.close()
pool.join()
#进程池中要先close再join
运行结果

并行
运行情况:
把生成的14个子进程的前5个进程放入进程池,进程池按照并行同时执行5个进程,每当这5个进程有一个执行完的时候,后面剩下的9个子进程就会放入一个进程到进程池里,再同时执行5个进程
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" from multiprocessing import Pool
import time,os def Test(i):
time.sleep(2)
print ("In process",i,":",os.getpid()) if __name__ == '__main__':
pool = Pool(processes=5) #允许进程池同时放入5个进程,并让cpu运行这5个进程 for i in range(14):
pool.apply_async(func=Test,args=(i,)) #并行 print("Processes Running") pool.close()
pool.join()
#进程池中要先close再join,如果没有join的话脚本就会停止运行
运行

因为前5个进程是同时开始执行也是同时执行完的,所以后面来的进程也是同时5个传入,同时执行
并行进程池中的回调
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" from multiprocessing import Pool
import time,os def Test(i):
time.sleep(2)
print ("In process",i,":",os.getpid())
return i def Back(n):
print("Process",n,":-------<",os.getpid(),">--------") if __name__ == '__main__':
pool = Pool(processes=5) #允许进程池同时放入5个进程,并让cpu运行这5个进程 for i in range(14):
pool.apply_async(func=Test,args=(i,),callback=Back) #callback为回调函数,每个进程执行完,执行callback的回调函数 print("主进程的进程号:",os.getpid()) pool.close()
pool.join()
#进程池中要先close再join,如果没有join的话脚本就会停止运行
运行

进程池中的回调函数是主进程启动执行的,所以进程号是一样的
Python多进程-进程池的更多相关文章
- day12学python 多进程+进程池
多进程+进程池 多进程(不同进程不可直接访问数据) 引入(多进程套线程) 多进程 需导入multiprocessing模块 模板示例1 import threading,time,multiproce ...
- Python 多进程进程池Queue进程通信
from multiprocessing import Pool,Manager import time def hanshu(queue,a): n = 1 while n<50: # pri ...
- python使用进程池多进程时,如何打印错误信息
一.说明 1.python进程池进行多进程运行时,如果有错误,该进程会直接跳过,并且不会打印错误信息. 2.如果需要了解到进程内的错误信息,此时就需要通过捕获异常来输出错误信息了. 二.具体方法如下: ...
- 网络编程并发 多进程 进程池,互斥锁,信号量,IO模型
进程:程序正在执行的过程,就是一个正在执行的任务,而负责执行任务的就是cpu 操作系统:操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序. 操作系统的作用: 1:隐藏丑陋复杂的硬件接 ...
- python多进程并发进程池Pool
简介: python中的多进程主要使用到 multiprocessing 这个库.低版本python这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级 ...
- python 36 进程池、线程池
目录 1. 死锁与递归锁 2. 信号量Semaphor 3. GIL全局解释器锁:(Cpython) 4. IO.计算密集型对比 4.1 计算密集型: 4.2 IO密集型 5. GIL与Lock锁的区 ...
- python中进程池和回调函数
一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...
- python3多进程 进程池 协程并发
一.进程 我们电脑的应用程序,都是进程,进程是资源分配的单位.进程切换需要的资源最大,效率低. 进程之间相互独立 cpu密集的时候适合用多进程 #多 ...
- python之进程池与线程池
一.进程池与线程池介绍 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时就应该 ...
随机推荐
- mongod无法启动
今天遇到了一个奇葩问题,我在Linux系统里备份了数据库,结果不知道为什么,系统用不了了,后来经过同事的检查,发现原来是我的硬盘快满了,导致mongod数据无法启动,真是.......
- Phoenix性能优化
目录: 1.建表优化 2.二级索引 3.并行处理 1.建表优化 Salting 翻译成中文是加盐的意思,本质是在hbase的rowkey的byte数组的第一个字节位置设定一个系统生成的byte值, 这 ...
- Linux 解压压缩命令
一.概述: 1.压缩命令: 命令格式:tar -zcvf 压缩文件名.tar.gz 被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:t ...
- centos6.5 安装JDK
今天在自己的centos机子上安装jdk,发现以前的教程都比较旧了,很多东西都过时了.今天把自己安装的感受写一下. 判断是否安装 首先,我们得判断机子上是不是安装了jdk,好多人推荐使用java -v ...
- js状态模式
状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当 ...
- TemplatedParent 与 TemplateBinding
http://blog.csdn.net/idebian/article/details/8761388
- eclipse部署和启动guns
eclipse部署guns: 1.import -> 搜索maven -> Existing Maven Projects -> 选择guns根目录 2.修改配置文件: spring ...
- UnityGUI扩展实例:图片挖洞效果 Mask的反向实现
转载自 https://www.taidous.com/forum.php?mod=viewthread&fid=211&tid=55259 我想大家在用uGUI做界面时,可能经常会碰 ...
- 5.MySQL优化---索引优化专题
来自互联网,整理转载. 摘要:多关于索引,分为以下几点来讲解: 一.索引的概述(什么是索引,索引的优缺点) 二.索引的基本使用(创建索引) 三.索引的基本原理(面试重点) 四.索引的数据结构(B树,h ...
- nginx RTMP FFmpeg 视频直播
/**************************************************************************** * nginx RTMP FFmpeg 视频 ...