Python并发编程—进程池

进程池实现

1.必要性
【1】 进程的创建和销毁过程消耗的资源较多
【2】 当任务量众多,每个任务在很短时间内完成时,需要频繁的创建和销毁进程。此时对计算机压力较大
【3】 进程池技术很好的解决了以上问题。

2.原理

创建一定数量的进程来处理事件,事件处理完进 程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁。增加进程的重复利用,降低资源消耗。

3.进程池实现

【1】 创建进程池对象,放入适当的进程

from multiprocessing import Pool

Pool(processes)

  • 功能: 创建进程池对象
  • 参数: 指定进程数量,默认根据系统自动判定

【2】 将事件加入进程池队列执行

pool.apply_async(func,args,kwds)

  • 功能: 使用进程池执行 func事件
  • 参数: func 事件函数
  •   args 元组 给func按位置传参
  •   kwds 字典 给func按照键值传参
  • 返回值: 返回函数事件对象

【3】 关闭进程池

pool.close()

  • 功能: 关闭进程池

【4】 回收进程池中进程

pool.join()

  • 功能: 回收进程池中进程

 1 from multiprocessing import Pool
 2 from time import sleep,ctime
 3
 4 # 进程池事件
 5 def worker(msg):
 6   sleep(2)
 7   print(msg)
 8   return ctime()
 9
10 # 创建进程池
11 pool = Pool(4)
12
13 # 向进程池添加执行事件
14 for i in range(10):
15   msg = "Hello %d"%i
16
17   # r 代表func事件的一个对象
18   r = pool.apply_async(func=worker,args=(msg,))
19
20 # 关闭进程池
21 pool.close()
22
23 # 回收进程池
24 pool.join()
25
26 print(r.get()) # 可以获取事件函数的返回值

进程池使用演示

原文地址:https://www.cnblogs.com/maplethefox/p/10989156.html

时间: 2024-12-27 09:34:12

Python并发编程—进程池的相关文章

Python并发编程-进程池

为什么有进程池的概念 效率问题 每次开启进程,都需要开启属于这个进程的内存空间 寄存器,堆栈 进程过多,操作系统的调度 进程池 python中的 先创建一个属于进程的池子 这个池子指定能存放多少进程 先将这些进程创建好 更高级的进程池 3,20 默认启动3个进程 处理能力不够的时候,加进程 最多20个 python中没有 from multiprocessing import Pool,Process import time #Process就无需使用了 def func(n): for i i

(并发编程)进程池线程池--提交任务的2种方式、协程--yield greenlet,gevent模块

一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用"池":池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO密集型 #提交任务的两种方式:    # 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的    # 异步调用:提交完一个任务之后,不在原地等待,结果???,而是

45_并发编程-进程池

一.为什么引入进程池 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务.那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程(空间,变量,文件信息等等的内容)也需要消耗时间.第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,维护一个很大的进程列表的同时,调度的时候,还需要进行切换并且记录每个进程的执行节点,也就是记录上下文(各种变量等等乱七八糟的东西,虽然你看不到,但是操作系统都要做),这样反而会影

python并发编程--进程--其他模块-从菜鸟到老鸟(三)

concurrent模块 1.concurrent模块的介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor:进程池,提供异步调用 ProcessPoolExecutor 和 ThreadPoolExecutor:两者都实现相同的接口,该接口由抽象Executor类定义. 2.基本方法 submit(fn, *args, **kwargs) :异步提交任务 map(func,

python_并发编程——进程池

1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '__main__': pool = Pool(3) #启动有三个进程的进程池. #第一个参数进程要访问的代码,第二个参数必须是一个可迭代参数,规定了要执行的任务数 pool.map(func,range(100)) #100个任务 结果: 每个数打印了10次. 2.进程池和多进程的用时对比 def f

Python并发编程-进程 线程 协程

一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据集:数据集则是程序在执行过程中所需要使用的资源 3.进程控制块:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感 知进程存在的唯一标志. 二.线程                                                                        

Python并发编程—进程

多任务编程 1.意义: 充分利用计算机多核资源,提高程序的运行效率. 2.实现方案 :多进程 , 多线程 3.并行与并发 并发 : 同时处理多个任务,内核在任务间不断的切换达到好像多个任务被同时执行的效果,实际每个时刻只有一个任务占有内核. 并行 : 多个任务利用计算机多核资源在同时执行,此时多个任务间为并行关系. 进程(process) 进程理论基础 1.定义 : 程序在计算机中的一次运行. 程序是一个可执行的文件,是静态的占有磁盘. 进程是一个动态的过程描述,占有计算机运行资源,有一定的生命

python并发编程-进程理论-进程方法-守护进程-互斥锁-01

操作系统发展史(主要的几个阶段) 初始系统 1946年第一台计算机诞生,采用手工操作的方式(用穿孔卡片操作) 同一个房间同一时刻只能运行一个程序,效率极低(操作一两个小时,CPU一两秒可能就运算完了) 联机批处理系统 脱机批处理系统 多道程序系统 1.空间上的复用 ? 多个程序公用一套计算机硬件 2.时间上的复用 ? 切换+保存状态 ? 保存状态:保存当前的运行状态,下次接着该状态继续执行 ? 切换的两种情况 ? (1) 当一个程序遇到 I/O 操作(不需要使用CPU),操作系统会剥夺该程序的C

Python并发编程-进程间数据共享

Manager中进程数据不安全 通过加锁解决 from multiprocessing import Manager,Process,Lock def main(dic,lock): lock.acquire() dic['count'] -=1 print(dic) lock.release() if __name__ == '__main__': m = Manager() l = Lock() dic = m.dict({'count':100}) #主进程中数据提供到子进程去操作 p_l