平常会经常用到多进程,可以用进程池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简单使用相关推荐

  1. python多进程线程学习_python进程、线程的学习心得

    什么是多线程竞争? 线程不是独立的,同一个进程里的线程,线程间的数据是共享的,多线程操作时,容易造成数据的混乱,线程不安全. 如何解决? 互斥锁. 好处:能够保证某段关键代码执行时,只有一个线程操作, ...

  2. python进程间通信时间开销_python 进程间的通信

    python3,进程间的通信 本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is ...

  3. python创建进程的方法_python进程的状态、创建及使用方法详解

    本文实例讲述了python进程的状态.创建及使用方法.分享给大家供大家参考,具体如下: 进程以及状态 1. 进程 程序:例如xxx.py这是程序,是一个静态的 进程:一个程序运行起来后,代码+用到的资 ...

  4. python线程池操作_python线程池和进程池

    线程池和进程池 开局来张图 使用线程池的好处 1.提升性能:因为减去了大量新建.终止线程的开销,重用了线程资源 2.使用场景:适合处理突发性大量请求或需要大量线程完成任务.但实际任务处理时间较短 3. ...

  5. python跨文件全局变量_Python 进程之间共享数据(全局变量)的方法

    进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...

  6. python进程和线程_Python进程与线程知识

    好程序员Python 培训分享进程与线程知识 , Python 开发语言现在已经是被大家非常看中的编程语言了,本篇文章给读者们分享一下 Python 进程与线程知识小结,本篇文章具有一定的参考借鉴价值 ...

  7. python 协程、进程、线程_Python进程、线程、协程之间的关系

    一.从操作系统角度 操作系统处理任务, 调度单位是 进程 和 线程 . 1.进程: 表示一个程序的执行活动 (打开程序.读写程序数据.关闭程序) 2.线程: 执行某个程序时, 该进程调度的最小执行单位 ...

  8. python的进程和线程_Python进程与线程知识

    Python进程与线程知识,Python开发语言现在已经是被大家非常看中的编程语言了,本篇文章给读者们分享一下Python进程与线程知识小结,本篇文章具有一定的参考借鉴价值,感兴趣的小伙伴来了解一下吧 ...

  9. python线程间数据共享_python 进程间数据共享multiProcess.Manger实现解析

    一.进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据. 这样极大地减少了对使用锁定和其他同步手段的需求, ...

最新文章

  1. C++的STL 堆 实现获取数组堆第K大的数
  2. angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
  3. mysql-5.7.37-winx64解压版安装超详细图文教程
  4. java学习(173):class反射编程方法
  5. 对于vsftp writable anonymous root问题的解决
  6. Eclipse、IntelliJ IDEA、TortoiseSVN清除svn帐号
  7. 什么是面向服务的体系结构(SOA)?(转载)
  8. 严重的PHP缺陷可导致QNAP NAS 设备遭RCE攻击
  9. 【ProcessOn】在线流程图、思维导图、原型图、UML图制作工具ProcessOn使用
  10. 因为相信所以看见,既然看见注定坚信《17》
  11. entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit
  12. 【智能硬件】Jetson nana 扩展显存(内存)
  13. 矩阵论笔记(二)——线性变换
  14. js时间戳转时间(年-月-日 时:分:秒)
  15. 如何在GitHub上建立一个自己的网站
  16. Siri语音测试用例设计点
  17. 算法很美-位运算-找出落单的那个数
  18. 在线问答“三重门”:知识、营销与服务直达
  19. Flash3D学习计划(三)——学习VB,IB相关,理解三角形顶点顺序;在屏幕上显示2D矩形,并实现缩放,平移,旋转...
  20. R 多变量数据预处理_数据科学 | 第3讲 数据清洗与预处理

热门文章

  1. mysql 异地备份工具_异地备份简单实现(mysql)
  2. java new数组_Java如何使用new创建数组
  3. mysql 免安装版迁移_mysql免安装版 安装配置 (转)
  4. linux 进程代码,怎样从Linux终端管理进程:10个你必须知道的命令
  5. 【电路补习笔记】10、电感式开关电源(BUCK 降压电路)
  6. Hi3520d uImage制作 uboot制作 rootfs制作
  7. Linux 驱动开发之内核模块开发(四)—— 符号表的导出
  8. vue路由传参两种方式;vue路由传参query与params区别;vue路由跳转的带参与不带参,路由跳转传参方式:name 、 path;
  9. [react] 在使用react过程中你都踩过哪些坑?你是怎么填坑的?
  10. Taro+react开发(5)--tora项目开发安装