介绍
本篇文章给大家分享的是有关什么是Python中的进程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>进程池池强>
当需要创建的子进程数量不多时,可以直接利用多处理中过程的动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到多处理模块提供的池方法。
初始化池时,可以指定一个最大进程数,当有新的请求提交到池中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来执行。
得到multiprocessing import 池 import 操作系统 import 时间 import 随机 def 工人(味精): ,,,t_start =, time.time () ,,,print (“% d进程开始执行% d" % (os.getpid()、味精)) ,,,# random.random()随机生成0 ~ 1之间的浮点数 ,,,time . sleep (random.random () * 2), ,,,t_stop =, time.time () ,,,print(味精、“执行完毕,耗时% 0.2 f" % (t_stop-t_start)) if __name__ ==, & # 39; __main__ # 39;: ,,,阿宝=池(3),#定义一个进程池,最大进程数3 ,,,for 小姐:拷贝范围(0,10): ,,,,,,,# Pool.apply_async(要调用的目标,(传递给目标的参数元祖,)) ,,,,,,,#每次循环将会用空闲出来的子进程去调用目标 ,,,,,,,po.apply_async(工人,(我)) ,,,print(“- - - - - - - - - -“开始) ,,,po.close(), #关闭进程池,关闭后阿宝不再接收新的请求 ,,,po.join(), #等待订单中所有子进程执行完成,必须放在亲密语句之后 ,,,print(“——端——产生绯闻。)
运行结果为:
- - - - - - - - - -开始 4353年进程开始执行0 4354年进程开始执行1 4355年进程开始执行2 2,执行完毕,耗0.20时 4355年进程开始执行3 1、执行完毕,耗1.19时 4354年进程开始执行4 4、执行完毕,耗0.37时 4354年进程开始执行5 0,执行完毕,耗1.57时 4353年进程开始执行6 5,执行完毕,耗0.19时 4354年进程开始执行7 3,执行完毕,耗1.63时 4355年进程开始执行8 6,执行完毕,耗0.49时 4353年进程开始执行9 8日,执行完毕,耗0.75时 7,执行完毕,耗0.90时 9日,执行完毕,耗0.63时 ——端- - - - - -
<强>多处理。池常用函数解析:强>
apply_async (func (args [, kwds]]):使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),参数为传递给函数的参数列表,kwds为传递给func的关键字参数列表;
应用(func (args [, kwds]]):使用阻塞方式调用func
关闭():关闭池,使其不再接受新的任务,
终止():不管任务是否完成,立即终止;
加入():主进程阻塞,等待子进程的退出,必须在关闭或终止之后使用;
<强>应用堵塞式强>
得到multiprocessing import 池 import 操作系统 import 时间 import 随机 def 工人(味精): ,,,t_start =, time.time () ,,,print (“% d进程开始执行% d" % (os.getpid()、味精)) ,,,# random.random()随机生成0 ~ 1之间的浮点数 ,,,time . sleep (random.random () * 2), ,,,t_stop =, time.time () ,,,print(味精、“执行完毕,耗时% 0.2 f" % (t_stop-t_start)) if __name__ ==, & # 39; __main__ # 39;: ,,,阿宝=池(3),#定义一个进程池,最大进程数3 ,,,for 小姐:拷贝范围(0,10): ,,,,,,,# Pool.apply_async(要调用的目标,(传递给目标的参数元祖,)) ,,,,,,,#每次循环将会用空闲出来的子进程去调用目标 ,,,,,,,po.apply(工人,(我)) ,,,print(“- - - - - - - - - -“开始) ,,,po.close(), #关闭进程池,关闭后阿宝不再接收新的请求 ,,,po.join(), #等待订单中所有子进程执行完成,必须放在亲密语句之后 ,,,print(“——端——产生绯闻。)
运行结果为:
4400进程开始执行0 0,执行完毕,耗1.89时 4401年进程开始执行1 1、执行完毕,耗1.91时 4402年进程开始执行2 2,执行完毕,耗1.64时 4400年进程开始执行3 3,执行完毕,耗1.16时 4401年进程开始执行4 4、执行完毕,耗1.85时 4402年进程开始执行5 5,执行完毕,耗0.29时 4400年进程开始执行6 6,执行完毕,耗0.19时 4401年进程开始执行7 7,执行完毕,耗1.19时 4402年进程开始执行8 8日,执行完毕,耗0.61时 4400年进程开始执行9 9日,执行完毕,耗1.08时 - - - - - - - - - -开始 ——端- - - - - -什么是Python中的进程池