python 进程池不足_python 进程池pool简单使用
平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用。
需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ‘__main__’ :语句的下面,才能正常使用Windows下的进程模块。Unix/Linux下则不需要。
Pool类
Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,
才会创建新的进程来执行这些请求。
下面介绍一下multiprocessing 模块下的Pool类下的几个方法:
1、apply()
函数原型:apply(func[, args=()[, kwds={}]])
该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束(不建议使用,并且3.x以后不在出现)。
2、apply_async
函数原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])
与apply用法一致,但它是非阻塞的且支持结果返回后进行回调。
3、map()
函数原型:map(func, iterable[, chunksize=None])
Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到结果返回。
注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。
4、map_async()
函数原型:map_async(func, iterable[, chunksize[, callback]])
与map用法一致,但是它是非阻塞的。其有关事项见apply_async。
5、close()
关闭进程池(pool),使其不在接受新的任务。
6、terminal()
结束工作进程,不在处理未处理的任务。
7、join()
主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用。
简单实现代码
importmultiprocessingimporttimedeffunc(msg):print("msg:", msg)
time.sleep(3)print("end,", msg)if __name__ == "__main__":#这里设置允许同时运行的的进程数量要考虑机器cpu的数量,进程的数量最好别小于cpu的数量,
#因为即使大于cpu的数量,增加了任务调度的时间,效率反而不能有效提高
pool = multiprocessing.Pool(processes = 3)
item_list= ['processes1' ,'processes2' ,'processes3' ,'processes4' ,'processes5',]
count=len(item_list)for item initem_list:
msg= "hello %s" %item#维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
pool.apply_async(func, (msg,))
pool.close()
pool.join()#调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
python 进程池不足_python 进程池pool简单使用相关推荐
- python多进程线程学习_python进程、线程的学习心得
什么是多线程竞争? 线程不是独立的,同一个进程里的线程,线程间的数据是共享的,多线程操作时,容易造成数据的混乱,线程不安全. 如何解决? 互斥锁. 好处:能够保证某段关键代码执行时,只有一个线程操作, ...
- python进程间通信时间开销_python 进程间的通信
python3,进程间的通信 本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is ...
- python创建进程的方法_python进程的状态、创建及使用方法详解
本文实例讲述了python进程的状态.创建及使用方法.分享给大家供大家参考,具体如下: 进程以及状态 1. 进程 程序:例如xxx.py这是程序,是一个静态的 进程:一个程序运行起来后,代码+用到的资 ...
- python线程池操作_python线程池和进程池
线程池和进程池 开局来张图 使用线程池的好处 1.提升性能:因为减去了大量新建.终止线程的开销,重用了线程资源 2.使用场景:适合处理突发性大量请求或需要大量线程完成任务.但实际任务处理时间较短 3. ...
- python跨文件全局变量_Python 进程之间共享数据(全局变量)的方法
进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...
- python进程和线程_Python进程与线程知识
好程序员Python 培训分享进程与线程知识 , Python 开发语言现在已经是被大家非常看中的编程语言了,本篇文章给读者们分享一下 Python 进程与线程知识小结,本篇文章具有一定的参考借鉴价值 ...
- python 协程、进程、线程_Python进程、线程、协程之间的关系
一.从操作系统角度 操作系统处理任务, 调度单位是 进程 和 线程 . 1.进程: 表示一个程序的执行活动 (打开程序.读写程序数据.关闭程序) 2.线程: 执行某个程序时, 该进程调度的最小执行单位 ...
- python的进程和线程_Python进程与线程知识
Python进程与线程知识,Python开发语言现在已经是被大家非常看中的编程语言了,本篇文章给读者们分享一下Python进程与线程知识小结,本篇文章具有一定的参考借鉴价值,感兴趣的小伙伴来了解一下吧 ...
- python线程间数据共享_python 进程间数据共享multiProcess.Manger实现解析
一.进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据. 这样极大地减少了对使用锁定和其他同步手段的需求, ...
最新文章
- C++的STL 堆 实现获取数组堆第K大的数
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
- mysql-5.7.37-winx64解压版安装超详细图文教程
- java学习(173):class反射编程方法
- 对于vsftp writable anonymous root问题的解决
- Eclipse、IntelliJ IDEA、TortoiseSVN清除svn帐号
- 什么是面向服务的体系结构(SOA)?(转载)
- 严重的PHP缺陷可导致QNAP NAS 设备遭RCE攻击
- 【ProcessOn】在线流程图、思维导图、原型图、UML图制作工具ProcessOn使用
- 因为相信所以看见,既然看见注定坚信《17》
- entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit
- 【智能硬件】Jetson nana 扩展显存(内存)
- 矩阵论笔记(二)——线性变换
- js时间戳转时间(年-月-日 时:分:秒)
- 如何在GitHub上建立一个自己的网站
- Siri语音测试用例设计点
- 算法很美-位运算-找出落单的那个数
- 在线问答“三重门”:知识、营销与服务直达
- Flash3D学习计划(三)——学习VB,IB相关,理解三角形顶点顺序;在屏幕上显示2D矩形,并实现缩放,平移,旋转...
- R 多变量数据预处理_数据科学 | 第3讲 数据清洗与预处理
热门文章
- mysql 异地备份工具_异地备份简单实现(mysql)
- java new数组_Java如何使用new创建数组
- mysql 免安装版迁移_mysql免安装版 安装配置 (转)
- linux 进程代码,怎样从Linux终端管理进程:10个你必须知道的命令
- 【电路补习笔记】10、电感式开关电源(BUCK 降压电路)
- Hi3520d uImage制作 uboot制作 rootfs制作
- Linux 驱动开发之内核模块开发(四)—— 符号表的导出
- vue路由传参两种方式;vue路由传参query与params区别;vue路由跳转的带参与不带参,路由跳转传参方式:name 、 path;
- [react] 在使用react过程中你都踩过哪些坑?你是怎么填坑的?
- Taro+react开发(5)--tora项目开发安装