python编程系列---进程池的优越性体验
1.通过multiprocessing.Process()类创建子进程
import multiprocessing, time, os, random def work(index):
"""
任务
:param index:任务索引号
"""
start_time = time.time() # 取当前时间,以毫秒为单位,从1979年一月一号算起
# random.random() :random() -> x in the interval [0, 1)
time.sleep(random.random())
stop_time = time.time()
print("任务%d 执行时间%.2f 当前进程id = %d 当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid())) if __name__ == '__main__':
print("main - 当前进程id = %d" % os.getpid())
# 创建子进程方式1 通过multiprocessing.Process()类创建
for i in range(10):
p = multiprocessing.Process(target=work, args=(i,))
p.start()
结果如下: 可以看出完成10个任务创建了10个子进程,且这些子进程由主进程创建

2.使用进程池创建子进程
"""
进程池
1. multiprocessing.Pool()
2. apply_async(func[,args[,kwds]])
申请异步执行任务
- func:指向子进程要执行的函数
- args:向func指向的函数传递可变参数
- kwargs:向func指向的函数传递关键字参数
3. close() : 关闭进程池, 不再接收新的任务请求
4. terminate() :终止进程池中的子进程的任务执行
5. join(): 阻塞主进程,直到进程池中的所有子进程执行完毕,再解阻塞,必须在close或terminate之后使用;
"""
import multiprocessing, time, os, random def work(index):
"""
任务
:param index:任务索引号
"""
start_time = time.time() # 取当前时间,以毫秒为单位,从1979年一月一号算起
# random.random() :random() -> x in the interval [0, 1)
time.sleep(random.random())
stop_time = time.time()
print("任务%d 执行时间%.2f 当前进程id = %d 当前进程的父进程为id= %d" % (index, stop_time - start_time, os.getpid(), os.getppid())) if __name__ == '__main__':
print("main - 当前进程id = %d" % os.getpid())
# 创建进程池
"""通过进程池来创建子进程,再执行任务
processes=3: 设置进程池最大值(拥有进程最大数量)
缺省值: os.cpu_count() or 1 , 即cpu的数量作为进程池的最大值
"""
pool = multiprocessing.Pool(3)
for i in range(10):
pool.apply_async(func=work, args=(i,))
结果如下: 可以看出,完成10个任务,总共还是3个子进程,且这3个子进程也是有主进程创建

如果你和我有共同爱好,我们可以加个好友一起交流!

python编程系列---进程池的优越性体验的更多相关文章
- python中的进程池
1.进程池的概念 python中,进程池内部会维护一个进程序列.当需要时,程序会去进程池中获取一个进程. 如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止. 2.进程池 ...
- python中的进程池:multiprocessing.Pool()
python中的进程池: 我们可以写出自己希望进程帮助我们完成的任务,然后把任务批量交给进程池 进程池帮助我们创建进程完成任务,不需要我们管理.进程池:利用multiprocessing 下的Pool ...
- Python中的进程池与线程池(包含代码)
Python中的进程池与线程池 引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用su ...
- python并发编程之进程池,线程池,协程
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- python并发编程之进程池,线程池concurrent.futures
进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多, 这会对 ...
- Python并发编程之进程池与线程池
一.进程池与线程池 python标准模块concurrent.futures(并发未来) 1.concurrent.futures模块是用来创建并行的任务,提供了更高级别的接口,为了异步执行调用 2. ...
- python并发编程之进程池、线程池、协程
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- Python网络编程(进程池、进程间的通信)
线程池的原理: 线程池是预先创建线程的一种技术.线程池在还没有任务到来之前, 创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态, 即均为启动,不消 ...
- python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)
9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型 池子内什么时候装线程:并发的任务属于I ...
随机推荐
- FEDay会后-Serverless与云开发,可能是前端的下一站
进化本身是生物体与环境之间持续不断的信息交换的具体表现. -- 摘自<信息简史> 很荣幸在9月21号成都举办的第五届FEDay上作为讲师为大家分享腾讯云在近两年推出的云开发相关的技术和知识 ...
- [VB.NET Tips]VB.NET专有的字符串处理函数
.NET Framework类库中含有专门为Visual Basic.NET程序员设计的函数和过程. 这些方法虽然是为VB.NET程序员设计的,但是也可以被.NET Framework上支持的任何语言 ...
- 制作mysql大数据表验证覆盖索引
昨天跟同事聊起数据表性能的问题,能不能仅用覆盖索引实现数据的汇总统计.找了一个开发环境已有的数据表进行测试,通过explain命令,能看到mysql通过覆盖索引就能实现sum的需求,而无须去读取实际行 ...
- net core WebApi——定时任务Quartz
目录 前言 Quartz 测试 问题及解决方法 小结 前言 本来打算昨天都开始写这篇,就因为要把小团队的博客整理汇总,一看二哈的博客那么多,一个个复制粘贴肯定麻烦(其实是我自己觉得复制麻烦),所以穿插 ...
- 使用Spreadsheet导出表格时,设置样式
$spreadsheet = new Spreadsheet();// 初始化 $spreadsheet->createSheet();// 添加一个sheet ...
- QTP8.2--安装流程
一.安装说明: 1.进入安装文件夹,运行QTP8.2安装文件setup,进入安装向导后直接单击“QuickTest Professional 安装”选项,由于破解文件存在缺陷,所以请不要改变安装路径c ...
- JS思考遍历对象
var json={ “name”:”小明”, “age”:”10”, “sex”:”男” } for(var key in json); //key只是个变量名 console.log(key); ...
- 物料导出FreeMaker模板定义
<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?><Wor ...
- asp.net core 使用Mysql和Dapper
序曲:学习编程最好的方式就是敲代码,没有比这个更好的方法,哪怕你看了上百G的视频,都不如你自己敲几行代码更为有效.还有要记得敲完代码然后写一篇随笔来记录一下你所学所想. 大家都知道,.netcore是 ...
- Kubernetes 系列(一):本地k8s集群搭建
我们需要做以下工作: (1)安装VMware,运行CentOs系统,一个做master,一个做node. (2)安装K8s. (3)安装docker和部分镜像会需要访问外网,所以你需要做些网络方面的准 ...