python
来源:互联网 发布:擂台算法自然语言 编辑:程序博客网 时间:2024/06/08 07:47
进程池Pool
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程,此时就可以使用multiprocessing模块提供的Pool方法。初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,
如果池还没有满,那么就会创建一个新的进程来执行该请求;但如果池中
的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来执行,请看下面的实例:
代码如下:
#coding=utf-8from multiprocessing import Poolimport os, time, randomdef worker(msg): print('%s子进程%d开始执行'%(msg,os.getpid())) t_start = time.time() time.sleep(random.random()*10) t_end = time.time() print('%s执行结束,耗时%.2f'%(msg, t_end - t_start))#创建一个进程池,最大进程数为3po = Pool(3)for i in range(0,10): # Pool.apply_async(要调用的目标,(传递给目标的参数元祖,)) # 每次循环将会用空闲出来的子进程去调用目标 po.apply_async(worker,(i,))print('---开始---')po.close() #关闭进程池,关闭后po不再接收新的请求po.join() #等待po中所有子进程执行完毕,必须放在close语句之后print('---结束---')
运行结果:
---开始---0子进程5480开始执行1子进程5481开始执行2子进程5482开始执行2执行结束,耗时2.903子进程5482开始执行1执行结束,耗时4.814子进程5481开始执行0执行结束,耗时5.835子进程5480开始执行5执行结束,耗时0.826子进程5480开始执行3执行结束,耗时4.047子进程5482开始执行6执行结束,耗时3.548子进程5480开始执行4执行结束,耗时5.629子进程5481开始执行8执行结束,耗时1.247执行结束,耗时6.269执行结束,耗时7.68---结束---
multiprocessing.Pool常用函数解析:
apply_async(func[, args[, kwds]]) :使用非阻塞方式调用func(并行执
行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为
传递给func的参数列表,kwds为传递给func的关键字参数列表;
apply(func[, args[, kwds]]):使用阻塞方式调用func
close():关闭Pool,使其不再接受新的任务;
terminate():不管任务是否完成,立即终止;
join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后
使用;
apply堵塞式
#coding=utf-8from multiprocessing import Poolimport os, time, randomdef worker(msg): print('%s子进程%d开始执行'%(msg,os.getpid())) t_start = time.time() time.sleep(random.random()*10) t_end = time.time() print('%s执行结束,耗时%.2f'%(msg, t_end - t_start))#创建一个进程池,最大进程数为3po = Pool(3)for i in range(0,10): # Pool.apply_async(要调⽤的⽬标,(传递给⽬标的参数元祖,)) # 每次循环将会⽤空闲出来的⼦进程去调⽤⽬标 po.apply(worker,(i,))print('---开始---')po.close() #关闭进程池,关闭后po不再接收新的请求po.join() #等待po中所有⼦进程执⾏完成,必须放在close语句之后print('---结束---')
运行结果:
0子进程5546开始执行0执行结束,耗时3.871子进程5547开始执行1执行结束,耗时4.592子进程5548开始执行2执行结束,耗时8.053子进程5546开始执行3执行结束,耗时7.614子进程5547开始执行4执行结束,耗时3.445子进程5548开始执行5执行结束,耗时9.706子进程5546开始执行6执行结束,耗时5.497子进程5547开始执行7执行结束,耗时4.258子进程5548开始执行8执行结束,耗时8.259子进程5546开始执行9执行结束,耗时4.64---开始------结束---
阅读全文
1 0
- Python
- Python
- Python
- python
- Python
- PYTHON
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- Python
- python
- Python
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- E. Fire in the City Educational Codeforces Round 27 二分+扫描线求面积覆盖+离散化 丧心病狂
- HDU 6166 Senior Pan
- Bochs上运行BIOS启动失败原因分析
- MySQL用SQL开启general_log并设置路径
- python
- 过河
- 数组
- 子元素相对于父元素设定margin-top值的时候
- GO语言学习资源
- python基础入门7--异常
- Java集合类Set的add方法妙用
- UVA
- Cortex-m3 异常切换进Trumble模式