Python 进程池与进程锁
#coding:utf-8import time
import os
import multiprocessingdef work(count):print(count,',进程id:',os.getpid())time.sleep(5)if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程for i in range(20):pool.apply_async(func=work,args=(i,))time.sleep(20)
0 ,进程id: 8900
1 ,进程id: 15076
2 ,进程id: 11272
3 ,进程id: 17004
4 ,进程id: 154445 ,进程id: 15076
6 ,进程id: 8900
7 ,进程id: 11272
8 ,进程id: 17004
9 ,进程id: 1544410 ,进程id: 15076
11 ,进程id: 8900
12 ,进程id: 11272
13 ,进程id: 17004
14 ,进程id: 1544415 ,进程id: 8900
16 ,进程id: 15076
17 ,进程id: 17004
18 ,进程id: 11272
19 ,进程id: 15444
运行结果,可以看出:
1.进程id 是重复利用的,说明所有的进程是创建好的,放在一个Pool中。
2.因为Pool中一开始创建了5个进程,所以可以看到每次输出,都以5个,5个一起输出,因为Pool的最大能力是5。可以看到进程id 不是按照递增的顺序进行的,因为Pool 创建进程是异步的。
3.可以看到在主进程中有这一行代码:time.sleep(20),如果没有加这行代码,就看不到任何输出,为什么会这样呢?因为,在我们进程池还没有创建成功时,主进程已经运行完了。
4.如果不采用 time.sleep(20) 这种延时操作的话,也可以在后面加入 pool.close() pool.join() 来阻塞,这样也会等到进程池全部创建完毕。代码如下:
#coding:utf-8import time
import os
import multiprocessingdef work(count):print(count,',进程id:',os.getpid())time.sleep(5)if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程for i in range(20):pool.apply_async(func=work,args=(i,))pool.close()pool.join()
获取进程的返回值:
#coding:utf-8import time
import os
import multiprocessingdef work(count):print(count,',进程id:',os.getpid())time.sleep(5)return 'result is %d,pid is %d' % (count,os.getpid())if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程results=[]for i in range(20):result=pool.apply_async(func=work,args=(i,))results.append(result)for res in results:print(res.get()) # 通过这种方式,也就不需要后续调用 pool.close() 和 pool.join()# pool.close()# pool.join()
进程锁 :
#coding:utf-8import time
import os
import multiprocessingdef work(count,lock):lock.acquire()print(count,',进程id:',os.getpid())time.sleep(5)lock.release()return 'result is %d,pid is %d' % (count,os.getpid())if __name__ == '__main__':pool = multiprocessing.Pool(5) #创建了5个进程manager = multiprocessing.Manager()lock=manager.Lock()#results=[]for i in range(20):result=pool.apply_async(func=work,args=(i,lock))#results.append(result)# for res in results:# print(res.get()) # 通过这种方式,也就不需要后续调用 pool.close() 和 pool.join()pool.close()pool.join()
Python 进程池与进程锁相关推荐
- Python线程池与进程池
Python线程池与进程池 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...
- python 获取进程池 sleeping_Python 进程操作之进程池--Pool
进程池和multiprocess.Pool模块 1.进程池 为什么要有进程池?进程池的概念. 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务.那么在成千上万个任务需要 ...
- python并行计算进程池通信_Python使用进程池管理进程和进程间通信
与线程池类似的是,如果程序需要启动多个进程,也可以使用进程池来管理进程.程序可以通过 multiprocessing 模块的 Pool() 函数创建进程池,进程池实际上是 multiprocessin ...
- 进程池 python_Python进程池
在python中启动进程是非常耗资源的,有了进程池就可以限制同一时刻运行的进程数,避免程序崩溃. Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建 ...
- 【Swoole系列3.5】进程池与进程管理器
进程池与进程管理器 我们已经学习过单个进程相关的内容,也学习了进程间如何进行通信,但是,一个一个地进程还是非常不好管理,这不,Swoole 就为我们直接准备好了进程池以及进程管理相关的工具. 进程池 ...
- Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型
1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...
- python进程池_python进程池剖析(一)
python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...
- Python线程池、进程池的介绍与使用
文章目录 1.问题背景 2.单线程→\rightarrow→多线程→\rightarrow→线程池 2.1单线程简介 2.2多线程简介 2.3线程池介绍 2.3.1复用线程 2.3.2线程池的使用 3 ...
- python 进程池_python进程池
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiproce ...
最新文章
- 12-flutter Textfield的使用
- 浏览器兼容:IE6,IE7,IE8,FIREFOX,Chrome
- 爆改古董卡西欧计算器!能联网、能聊天,「作弊神器」只要150块
- c++生成nurbs曲面文件_使用曲面细分丰富原始多边形
- react打包后图片丢失_使用 webpack 搭建 React 项目
- Python学习笔记-包
- jmeter之JDBC类组件
- Java第十周的作业
- 计算机算法设计与分析 大学生电影节观影问题
- Jquery和JS获取ul中li标签
- nas918+支持的cpu_cpu拷机软件推荐:cpu烤机用什么软件
- 基于Python完成云知声平台的语音合成接口
- 谷歌翻译服务退出中国大陆,使用SwitchyOmega仍需要全文翻译,恢复访问的方法
- python爬虫脚本获取网易招聘某个职业的全部数据信息
- 硬盘变成了raw格式了怎么办?数据还能找回吗
- 慈爱的教育部门被误解了 --- 真正减负令的实施方案探讨
- Ka的分治|归并排序,注释详尽
- 使用udp协议实现服务器端程序时,uIP中UDP协议实现的改进
- 更改极点为第一输入法
- 利用Matlab判断某些点是否在多边形区域内
热门文章
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十四) 精灵控件横空出世!①
- win10 gtx1660ti 配置vs opencv cuda加速
- 论文四 ERP 开发的应用
- 使用Direct3D渲染2D图素
- js动态给元素添加属性
- Cocos2d-x中父节点scale对子节点的影响
- ecshop 属性自动组合_传奇手游,神途自动升级,好混属性强大
- 一位老师对学生的人生寄语(Z)
- java 判断对象是否为空_java怎么判断对象是否为空
- 从游戏开挂谈谈数据类型