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之进程池与线程池
一.进程池与线程池介绍 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时就应该 ...
随机推荐
- 【P1714】切蛋糕(单调队列)
实在不明白难度等级,难不成前缀和是个很变态的东西? 说白了就是单调队列裸题,都没加什么别的东西,就是一个前缀和的计算,然而这个题也不是要用它优化,而是必须这么做啊. #include<iostr ...
- 怎样在WIN7系统下安装IIS和配置ASP
一:Windows7系统 (IIS是WIN7自带的,版本7.0),首先是安装IIS.打开控制面板,找到“程序与功能”,点进去,点击左侧“打开或关闭Windows功能”,找到“Internet 信息服务 ...
- 到底EJB是什么
到底EJB是什么 到底EJB是什么?被口口相传的神神秘秘的,百度一番,总觉得没有讲清楚的,仍觉得一头雾水.百度了很久,也从网络的文章的只言片语中,渐渐有了头绪. 用通俗话说,EJB就是:" ...
- codeforces707B:Bakery
Description Masha wants to open her own bakery and bake muffins in one of the n cities numbered from ...
- numpy 往array里添加一个元素
首先这里p_arr为一个numpy的array,p_为一个元素 p_arr = np.concatenate((p_arr,[p_])) # 先将p_变成list形式进行拼接,注意输入为一个tuple ...
- Angular表单的本地校验和远程校验
AngularJS Form 进阶:远程校验和自定义输入项 表单远程校验 HTML代码: <!doctype html> <html ng-app="form-exampl ...
- Unity3D-UGUI图集打包与动态使用(TexturePacker)
参考地址: http://blog.csdn.net/cjsen/article/details/52487706 今天做项目大佬看我在做图集,就跟我说可以用工具打包图集,也就是TexturePack ...
- UrlRewrite重写url
UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址. 优点 (1)提高安全性 可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的 ...
- 树莓派视频监控 —— 使用 mjpg
下载到树莓派本地: $ wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip $ unzip master.zip ...
- python 类的定义和继承
python 2 中类 一.类定义: ? 1 2 class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性如果直接使用类 ...