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 ...
随机推荐
- TestNG(五) 5-7 套件测试
<?xml version="1.0" encoding="utf-8" ?> <suite name="test"> ...
- IPMI在linux下常用命令
ipmitool lan print 1 ipmitool lan set 1 ipaddr 192.168.0.12 ipmitool lan set 1 netmask 255.255.255.0 ...
- thymeleaf自定义标签方言处理
项目背景:springboot+thymeleaf thymeleaf两种方式处理自定义标签:AbstractAttributeTagProcessor 和 AbstractElementTagPro ...
- 我对android handle更新UI 的一些理解
1.handle可以方便快捷地管理子线程对主线程UI 的更新, 2.如果不用handle,当多个子线程同时请求更新UI 时,UI更新操作就无法进行
- 不fq安装 golang tools
go get -u -v github.com/golang/tools/go/buildutil ln -s $GOPATH/src/github.com/golang/tools $GOPATH/ ...
- Jmeter BeanShell 执行多次问题,每发送一次请求执行一次BeanShell问题
前言:(此问题耗时半天) 提供解决思路的博主又有新问题了. 如图所示,写了一个BeanShell从文件中去获取值之后给测试计划的变量赋值. 问题来了,当禁用b的情况下,a只执行一次.当启用b请求的情况 ...
- JQuery .width()/.css("width")方法 比较
1. 获取到的值的区别 获取到的为实际宽度,不包括 内边距 和 边框: <div id="aa"> ...... </div> // 1. width() ...
- 魔鬼在细节,理解Java并发底层之AQS实现
jdk的JUC包(java.util.concurrent)提供大量Java并发工具提供使用,基本由Doug Lea编写,很多地方值得学习和借鉴,是进阶升级必经之路 本文从JUC包中常用的对象锁.并发 ...
- 从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度
作者 | 至天 阿里巴巴高级研发工程师 一.基本知识 存储快照产生背景 在使用存储时,为了提高数据操作的容错性,我们通常有需要对线上数据进行 snapshot ,以及能快速 restore 的能力.另 ...
- Java 学习笔记之 线程isAlive方法
isAlive方法: 方法isAlive()功能是判断当前线程是否处于活动状态. 活动状态就是线程启动且尚未终止,比如正在运行或准备开始运行. public class IsAliveThread e ...