代码执行顺序的问题

代码执行顺序的问题

import os
import time
import multiprocessing


def work(count):
print(count, os.getpid())
time.sleep(2)
return 'count is {}, pid is {}'.format(count, os.getpid())


if __name__ == '__main__':
pool = multiprocessing.Pool(5)
results = []
for i in range(20):
result = pool.apply_async(func=work, args=(i,))
results.append(result)

for res in results:
print(res.get())

# pool.close()
   # pool.join()

我想问一下在这个脚本里面,系统执行这些代码的具体顺序是怎么样的。


因为我看到输出的顺序是先是第一组进进程池的五个work函数的print,

然后才输出第一组的res.get(),同时输出第二组的print


​在进程池中运行第一组5个work函数,在2秒后得到第一组的返回值,此时results列表中才有res,

是不是说在第一个for循环的过程中,第二个for循环一直在遍历这个results列表,不然如何解释第二个for循环分批地输出results列表中的结果呢?



正在回答

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

1回答

同学,你好!程序会先执行主进程,执行到res.get()时会阻塞主进程去执行子进程,5个子进程会异步执行,等子进程执行结束后再继续执行主进程,进程池中有位置的话就会向进程池中添加进程,当子进程执行到time.sleep()时CPU会进行切换,主进程比子进程执行的快从而会输出第二个for循环的结果,从而第二组之后是先添加进程,得到之前子进程的结果并输出

祝学习愉快!

  • 老师你好,这里前五个子进程执行结束之后继续执行第二个for循环主进程,这个时候的主进程和子进程是一起执行的吗?

    搜索

    复制

    2021-09-29 18:54:34
  • 同学,你好!不会一起执行的,会根据CPU的调度去执行进程,执行哪个是没有办法确定的。

    祝学习愉快!

    2021-09-30 10:06:35
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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