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之进程池与线程池
一.进程池与线程池介绍 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时就应该 ...
随机推荐
- VMWARE TOOLS安装出错:THE PATH IS NOT A VALID PATH TO THE 3.11.0.12-GENERIC KERNEL HEADERS
VMWARE TOOLS安装提示THE PATH IS NOT A VALID PATH TO THE GENERIC KERNEL HEADERS I solved this problem, I ...
- elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)
(1)在倒排索引中查找搜索串,获取document list date来举例 word doc1 doc2 doc3 2017-01-01 * *2017-02-02 * *2017-03-03 ...
- JavaWeb -- Jsp 和 JavaBean
JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为: <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件. <jsp ...
- Qt QT的IO流 QT输入输出
1. QFile QDataStream 读写文件 二进制读写文件 #include <QApplication> #include <QtGui> #include < ...
- (转)理解Keystone的四种Token
Token 是什么 通俗的讲,token 是用户的一种凭证,需拿正确的用户名/密码向 Keystone 申请才能得到.如果用户每次都采用用户名/密码访问 OpenStack API,容易泄露用户信息, ...
- JavaScript作用域新总结
作用域是什么 当我们将变量引入程序后,这些变量住在哪里,当程序需要的时候如何找到他们?这些问题都需要一个规则来存储变量,并且之后可以方便的找到这些变量,这套规则就被称为 作用域 .(管理变量的规则) ...
- java时间戳转换
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Da ...
- js对象数组 根据某个共同字段 分组
var arr = [ {"id":"1001","name":"值1","value":" ...
- 剑指offer--22.反转链表
时间限制:1秒 空间限制:32768K 热度指数:440624 本题知识点: 链表 题目描述 输入一个链表,反转链表后,输出新链表的表头. /* struct ListNode { int val; ...
- HDU - 5977 Garden of Eden (树形dp+容斥)
题意:一棵树上有n(n<=50000)个结点,结点有k(k<=10)种颜色,问树上总共有多少条包含所有颜色的路径. 我最初的想法是树形状压dp,设dp[u][S]为以结点u为根的包含颜色集 ...