执行顺序?

执行顺序?

https://img1.sycdn.imooc.com//climg/6425948a0988630507510225.jpghttps://img1.sycdn.imooc.com//climg/6425948b0979d28007610271.jpg

您好,老师的代码为什么运行结果是这样呢?您分析一下整个执行过程可以吗?

下面那个for和上面那个为什么会交叉显示啊??

正在回答 回答被采纳积分+1

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

1回答
好帮手慕小猿 2023-03-31 10:21:24

同学,你好!有20个任务要执行,进程池中有5个进程,可以执行5个任务。进程池中有进程执行完成就会将返回值返回并输出。进程池就会有空闲下的进程,没被执行的任务会添加进程池。因每个进程执行速度不同,所以看着是穿插的。

祝学习愉快~


  • 提问者 慕设计4457883 #1

    您好,还是没明白呢,第一个for循环是在容量为5的pool里进行,那第二个for res in results呢?

    如果第二个for是在主进程里的话,不应该主进程子进程同步进行,一上来就和第一个for同步跑吗?为啥要等第一个for循环一轮了才开始呢?


    2023-03-31 20:32:18
  • 好帮手慕小猿 回复 提问者 慕设计4457883 #2

    同学,你好!程序是由上到下顺序执行,先执行的是第一个for循环,此时进程池中进程在执行,再执行第二个for 循环。(执行第二个for 循环时,进程池中进程也在执行)由于电脑执行程序快,进程池有的进程已经执行完,进程返回对象了,有的刚执行,刚输出print(count, os.getpid())。

    同学可以看老师的运行结果,第一个for 循环第一轮进程id为14868的进程刚输出print(count, os.getpid())pid 为15520 进程返回值已经返回了,第二个for 循环已经有res输出。

    https://img1.sycdn.imooc.com//climg/642a3d6109d4efd611530884.jpg

    如同学看到进程id 为15520 第一次先执行完,该进程空闲。余下未执行的15个任务中的一个任务会被15520进程去执行


    https://img1.sycdn.imooc.com//climg/642a441609c63f9c06370453.jpg

    因为每个进程是异步的,执行顺序不是固定,执行速度也不同,有的进程执行完返回结果,有的进程可能正在执行print(count, os.getpid())。所以看着是交叉的。

    祝学习愉快~

    2023-04-03 10:56:43
  • 提问者 慕设计4457883 回复 好帮手慕小猿 #3

    请问老师,为什么第二个for循环也在进程池里执行呢?

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

    我以为只有第一个for循环里的work函数是在进程池里执行的,第二个for循环是在主进程进行的?

    为什么不是这样呢

    2023-04-07 17:13:35
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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