1. 首页
  2. Python

python的非阻塞式进程池pool.apply_async

“u003Cdivu003Eu003Cpu003E1、Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。u003Cu002Fpu003Eu003Cpu003E2、apply_async 是异步非阻塞的,相当于不用等待当前进程执行完毕,随时根据系统调度来进行进程切换,并执行其他进程。u003Cu002Fpu003Eu003Cpu003E以下是非阻塞式进程池代码,示例如下:u003Cu002Fpu003Eu003Cpreu003Efrom multiprocessing import Processu003Cbru003Efrom multiprocessing import Poolu003Cbru003Eimport os #导入系统os模块u003Cbru003Eimport time #导入时间time模块u003Cbru003Eimport random #导入随机模块u003Cbru003Edef task(taskname):u003Cbru003E print(“开始做任务啦,任务名称是:”,taskname)u003Cbru003E start=time.time() #设置开始时间u003Cbru003E time.sleep(random.randint(1,2)) #设置时间的随机休眠时间u003Cbru003E end=time.time() #设置结束时间u003Cbru003E print(“{}任务耗时{}秒,进程id:{}”.format(taskname,end-start,os.getpid()))u003Cbru003Etask(“听音乐”) #调用task函数,任务名是”听音乐”u003Cbru003Econtainer=[] #定义container为空列表u003Cbru003Edef callback_func(n): #定义回调函数callback_func,参数n是任务名u003Cbru003E container.append(n) #容器container中自动加入刚执行的任务nu003Cbru003Eif __name__==’__main__’:u003Cbru003E pool=Pool(3) #设置3个进程池u003Cbru003E tasks=[‘听音乐’,’唱歌’,’写作’,’做饭’,’打游戏’] #设置任务列表u003Cbru003E for task1 in tasks: #遍历任务列表tasks里的任务tasku003Cbru003E pool.apply_async(task,args=(task1,),callback=callback_func) #返回被进程调用任务task1的返回值u003Cbru003E pool.close() # 关闭进程池,表示不能在往进程池中添加进程u003Cbru003E pool.join() # 等待进程池中的所有进程执行完毕,必须在close()之后调用u003Cbru003E print(“OVER”) #进程池结束后,打印OVERu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码运行结果如下:u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 听音乐u003Cu002Fpu003Eu003Cpu003E听音乐任务耗时2.000056505203247秒,进程id:12968u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 听音乐u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 听音乐u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 听音乐u003Cu002Fpu003Eu003Cpu003E听音乐任务耗时1.000931978225708秒,进程id:4816u003Cu002Fpu003Eu003Cpu003E听音乐任务耗时1.0009000301361084秒,进程id:8484u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 听音乐u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 唱歌u003Cu002Fpu003Eu003Cpu003E听音乐任务耗时2.0004489421844482秒,进程id:2056u003Cu002Fpu003Eu003Cpu003E听音乐任务耗时1.000549077987671秒,进程id:4816u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 写作u003Cu002Fpu003Eu003Cpu003E唱歌任务耗时1.0005836486816406秒,进程id:8484u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 做饭u003Cu002Fpu003Eu003Cpu003E开始做任务啦,任务名称是: 打游戏u003Cu002Fpu003Eu003Cpu003E做饭任务耗时1.000941514968872秒,进程id:8484u003Cu002Fpu003Eu003Cpu003E打游戏任务耗时1.0009276866912842秒,进程id:2056u003Cu002Fpu003Eu003Cpu003E写作任务耗时2.000699758529663秒,进程id:4816u003Cu002Fpu003Eu003Cpu003EOVERu003Cu002Fpu003Eu003Cpu003E图片示例如下:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fade317d3e2e44d55881ed783590216d9″ img_width=”857″ img_height=”990″ alt=”python的非阻塞式进程池pool.apply_async” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fdivu003E”

原文始发于:python的非阻塞式进程池pool.apply_async

主题测试文章,只做测试使用。发布者:~那﹑男人是我的命﹪,转转请注明出处:http://www.cxybcw.com/13060.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code