代码执行顺序的问题
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列表中的结果呢?
55
收起
正在回答
1回答
同学,你好!程序会先执行主进程,执行到res.get()时会阻塞主进程去执行子进程,5个子进程会异步执行,等子进程执行结束后再继续执行主进程,进程池中有位置的话就会向进程池中添加进程,当子进程执行到time.sleep()时CPU会进行切换,主进程比子进程执行的快从而会输出第二个for循环的结果,从而第二组之后是先添加进程,得到之前子进程的结果并输出
祝学习愉快!
Python全能工程师
- 参与学习 人
- 提交作业 16233 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星