进程池可以减轻多进程对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多进程-进程池的更多相关文章

  1. day12学python 多进程+进程池

    多进程+进程池 多进程(不同进程不可直接访问数据) 引入(多进程套线程) 多进程 需导入multiprocessing模块 模板示例1 import threading,time,multiproce ...

  2. Python 多进程进程池Queue进程通信

    from multiprocessing import Pool,Manager import time def hanshu(queue,a): n = 1 while n<50: # pri ...

  3. python使用进程池多进程时,如何打印错误信息

    一.说明 1.python进程池进行多进程运行时,如果有错误,该进程会直接跳过,并且不会打印错误信息. 2.如果需要了解到进程内的错误信息,此时就需要通过捕获异常来输出错误信息了. 二.具体方法如下: ...

  4. 网络编程并发 多进程 进程池,互斥锁,信号量,IO模型

    进程:程序正在执行的过程,就是一个正在执行的任务,而负责执行任务的就是cpu 操作系统:操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序. 操作系统的作用: 1:隐藏丑陋复杂的硬件接 ...

  5. python多进程并发进程池Pool

    简介: python中的多进程主要使用到 multiprocessing 这个库.低版本python这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级 ...

  6. python 36 进程池、线程池

    目录 1. 死锁与递归锁 2. 信号量Semaphor 3. GIL全局解释器锁:(Cpython) 4. IO.计算密集型对比 4.1 计算密集型: 4.2 IO密集型 5. GIL与Lock锁的区 ...

  7. python中进程池和回调函数

    一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...

  8. python3多进程 进程池 协程并发

    一.进程           我们电脑的应用程序,都是进程,进程是资源分配的单位.进程切换需要的资源最大,效率低.         进程之间相互独立         cpu密集的时候适合用多进程 #多 ...

  9. python之进程池与线程池

    一.进程池与线程池介绍 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时就应该 ...

随机推荐

  1. 【bzoj1925】地精部落[SDOI2010](dp)

    题目传送门:1925: [Sdoi2010]地精部落 这道题,,,首先可以一眼看出他是要我们求由1~n的排列组成,并且抖来抖去的序列的方案数.然后再看一眼数据范围,,,似乎是O(n^2)的dp?然后各 ...

  2. jsonp 实现跨域例子

    直接上代码: js: <html> <head> <title>JSONP</title> </head> <script src = ...

  3. linux基础(8)-文件处理(awk 、sed、grep)

    grep基本用法 格式:grep [选项] [模式] [文件]   选项: -c:只显示有多少行匹配 ,而不具体显示匹配的行 -n:在每一行前面打印该行在文件中的行数 -i:在字符串比较的时候忽略大小 ...

  4. Java内部锁的可重用性(Reentrancy)

    Java提供了强制原子性的内部锁机制:synchronized块.但是内部锁是可重入的,当线程试图获得它自己占有的锁时,请求会成功. 简单的说,就是在一个synchronized方法内部调用本类的其他 ...

  5. nova Scheduling 配置

    Nova中调度配置: scheduler_driver_task_period = scheduler_driver = nova.scheduler.filter_scheduler.FilterS ...

  6. numpy函数:[6]arange()详解

    arange函数用于创建等差数组,使用频率非常高,arange非常类似range函数,会python的人肯定经常用range函数,比如在for循环中,几乎都用到了range,下面我们通过range来学 ...

  7. ControlTemplate,ItemsPanelTemplate,DataTemplate(wpf)

    在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和ItemsPanelTemplate是控件模板, ...

  8. hzau 1207 Candies

    1207: Candies Time Limit: 2 Sec  Memory Limit: 1280 MBSubmit: 223  Solved: 31[Submit][Status][Web Bo ...

  9. hdu 1849 Rabbit and Grass(nim)

    Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  10. splunk的统计分析功能——特定字段的统计功能包括取值分布(+topK,min/max/平均值)

    特定字段的统计功能——取值分布,topK,min/max/平均值 例如: date_second 60 值, 100% 的事件 时段平均值 时段最大值 时段最小值 上限值 时段上限值 罕见值 具有此字 ...