关于进程池子进程慢于主进程致使程序提前关闭

关于进程池子进程慢于主进程致使程序提前关闭

https://img1.sycdn.imooc.com//climg/6464c46b09a5203d11200898.jpg

https://img1.sycdn.imooc.com//climg/6464c46b0981ad0115601506.jpg

老师您好,我想问的问题是为什么在进程池函数中,执行进程池内的函数执行时间较主进程函数时间长,或者说主进程提前结束而是进程池内的子进程函数执行中断?

而相较于我上一个问题的解答,子进程在主进程函数执行完毕,在没有使用join阻塞语句时子进程却能依然执行直至子进程中函数执行完毕,进程池相交与主进程的执行逻辑与子进程相较于主进程的执行逻辑是有所区别么?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!是的,进程池、主进程与主进程、子进程是有区别的。进程池是主进程创建出来的,是主进程的一部分,所以当主进程结束后进程池对象被回收。进程池无法继续执行。同学可以重听下12:08秒处的视频解释。

https://img1.sycdn.imooc.com//climg/646580fc09d1293e06780694.jpg

而多进程中主进程和子进程互不干扰,主进程结束,子进程依然执行。同学可以复习下12分00秒的视频。视频链接:https://class.imooc.com/lesson/2099#mid=49799

https://img1.sycdn.imooc.com//climg/646581c009405a3a09740775.jpg

祝学习愉快~

  • 懒惰的围脖 提问者 #1

    谢谢老师解答!我基本上弄明白了,但是还有一个地方不太理解,在主进程下的语句:

    1 pool = multiprocessing.Pool(5)

    2 for i in range(20):

          pool.apply_async(func=work, args(i, ))

    主进程的执行结束时间与进程池的执行结束时间为什么会有所区别,进程池不也是主进程的一部分么,进程池中的线程逻辑不也是主进程的一部分么,为什么会出现主进程先执行完毕的情况,按理来说进程池作为主进程池的一部分不应该按着代码行从上到下执行么,进程池的逻辑不应提前被结束啊!

    2023-05-18 10:55:01
  • 好帮手慕小猿 回复 提问者 懒惰的围脖 #2

    同学,你好!主进程与进程池的关系是底层代码设置的逻辑,是开发者的逻辑,我们知道原理即可。主进程创建了进程池,说你去一边做你自己该做的事吧(即执行apply_async函数),我也去做我的事,但是我死了你必须和我一起死,然后进程池在做它的事情。等主进程死了,进程池也死了。

    祝学习愉快~

    2023-05-18 11:24:27
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师