关于 ThreadPoolExecute 用 with 方法

关于 ThreadPoolExecute 用 with 方法

http://img1.sycdn.imooc.com//climg/5d6f770c0001a4ca08380403.jpg

为什么用 with 方法 来写,后面就不再写join()挂起线程了?怎么回事?

Pool线程池可以用 with() 方法吗?怎么用? 

正在回答

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

3回答

同学你好:

http://img1.sycdn.imooc.com//climg/5d6f9d2f0001cdd008860308.jpg

如果为真,那么关机将不会返回,直到所有任务已经执行完毕,所使用的资源已回收执行器。

上面的这句话意思可以理解为所有的线程(判断有join的封装)任务执行完毕之后后,才会关闭线程池。

python内置的模块是使用c编写的,内部封装了这个模块的调用,所以没法儿让你看到。而且其确实做到了让主线程阻塞,等待子线程任务执行完成再关闭。

如果我解决了同学的问题,请采纳!学习愉快^_^。


好帮手乔木 2019-09-04 18:57:18

同学你好:

with关键字代表开启上下文,只要类中定义了

http://img1.sycdn.imooc.com//climg/5d6f90380001f6b905430181.jpg

__enter__()和__exit__()方法,都可以使用with关键字进行上下文管理。

由于__exit__()方法中调用了shutdown()方法,所以不需使用join()。

Pool也可以使用with关键字:

http://img1.sycdn.imooc.com//climg/5d6f94ec0001cff104500692.jpg

不使用with,需要将pool对象遍历即可。

http://img1.sycdn.imooc.com//climg/5d6f9818000197ad07510700.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。

  • 提问者 浪淘沙98 #1
    怎么理解“ 由于__exit__()方法中调用了shutdown()方法,所以不需使用join()。”这句话? shutdown是关闭线程池,join()是挂起主线程,两者好像没关系啊....
    2019-09-04 19:08:12
  • 提问者 浪淘沙98 #2
    还有,我想知道没使用with的时候,后面是不是使用了shutdown 和 join 这两个方法,图里面没有展现出来这一点。
    2019-09-04 19:13:17
提问者 浪淘沙98 2019-09-04 16:42:29

还有,不用with的话, executor.map(run,list)之后,该怎么写?是不是要先 shoutdown,再join()挂起?

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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