关于线程池关闭之后的join()

关于线程池关闭之后的join()

def use_pool():
   t = time.time()
   run_list = range(100)
   pool = ThreadPool(10)
   pool.map(run, run_list)
   pool.close()
   pool.join() 
   print(time.time() - t)

这里关闭线程池之前的map()不是会阻塞至任务结束吗,那关闭之后的join()有什么作用?

正在回答 回答被采纳积分+1

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

1回答
好帮手乔木 2019-10-30 18:48:44

同学你好:

map()函数会将第二个参数的需要迭代的列表元素一个个的传入第一个参数我们的函数中,第一个参数是我们需要引用的函数,这里我们看到第一个参数我们自己定义的函数并没有设置形参传值。并不会阻塞主线程。

close()函数:线程池close的时候并未关闭线程池,只是会把状态改为不可再插入元素的状态,完全关闭线程池使用。

join()函数·:让主线程等待其他线程执行完毕之后,主线程才会结束执行。

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

  • 提问者 慕丝8021493 #1
    if __name__ == '__main__': use_pool() print('*****************************') 这是测试代码,为什么我将pool.join()注释后,仍会执行完任务后,在执行主线程中的打印语句
    2019-10-30 21:32:01
  • 好帮手乔木 回复 提问者 慕丝8021493 #2
    同学你好:join的作用主要防止子线程的任务未执行完,主线程就退出了,和输出的顺序无关。学习愉快^_^。
    2019-10-31 10:56:28
  • 提问者 慕丝8021493 回复 好帮手乔木 #3
    之前上课的示例代码中,非守护线程即使主线程执行完了,程序也会等子线程执行完再退出,join()的作用在于阻塞主线程,调用join()的子线程执行完成后才会继续执行主线程。但此处线程池中线程执行时间大约在20s左右,在注释掉线程池的join()方法后,主线程只剩一个打印语句,为什么没有比子线程先执行完?这难道不是线程池已经阻塞主线程的效果吗?是我理解有误还是线程池跟单个线程不一样
    2019-10-31 11:38:02
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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