进程理解:
以下对部分语句理解不知道是否正确
完整脚本:
# 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全能工程师
- 参与学习 人
- 提交作业 16416 份
- 解答问题 4469 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星