进程理解:
以下对部分语句理解不知道是否正确
完整脚本:
# coding:utf-8 import os import time import multiprocessing def work(count): print(count, os.getpid()) time.sleep(5) if __name__ == '__main__': pool = multiprocessing.Pool(5) for i in range(20): result = pool.apply_async(func=work, args=(i, )) print(i) pool.close() print('test') pool.join() print('end')
部分语句理解:
1、根据参数i创建20个进程对象,将进程对象放入pool进程队列中。
此时print(i)会立刻输出, 而pool.apply_async(func=work, args=(i, ))会在队列中 根据work(count)在进程池中 依次执行
for i in range(20): result = pool.apply_async(func=work, args=(i, )) print(i)
2、pool.close()会在pool进程队列中没有进程对象才执行
pool.close()未执行时,pool.close()后面的语句可以先执行
print('test')不受子进程影响,直接执行
pool.join阻塞主进程,直到pool进程队列中没有进程对象才停止阻塞
pool.close() print('test') pool.join() print('end')
因此,脚本运行效果为:
12
收起
正在回答
1回答
同学,你好!1、理解的正确
2、pool.close()关闭的是进程池,使其不接受新的任务。pool.join阻塞主进程,直到所有子进程执行完成,才能执行主进程。即进程池中20个任务执行完成,再执行主程序的print("end")代码。print("test")是主进程代码,不受进程池影响理解是正确的。
祝学习愉快~
Python全能工程师
- 参与学习 人
- 提交作业 16247 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星