Python线程池模块ThreadPoolExecutor用法分析


Posted in Python onDecember 28, 2018

本文实例讲述了Python线程池模块ThreadPoolExecutor用法。分享给大家供大家参考,具体如下:

python3内置的有Threadingpool和ThreadPoolExecutor模块,两个都可以做线程池,当然ThreadPoolExecutor会更好用一些,而且也有ProcessPoolExecutor进程池模块,使用方法基本一致。

首先导入模块

from concurrent.futures import ThreadPoolExecutor

使用方法很简单,最常用的可能就是map方法和submit+as_completed

注意,一定要使用with,而不要使用for,如果你一定要用for,那么一定要手动进行executor.shutdown,而你使用了with方法的话,再with方法内部已经实现了wait(),在使用完毕之后可以自行关闭线程池,减少资源浪费。

使用map

with ThreadPoolExecutor(max_workers=2) as executor:
  result = executor.map(map_fun, itr_arg)
  '''map_fun:你传入的要执行的map函数
    itr_arg:一个可迭代的参数,可以是列表字典等可迭代的对象
    基本上和python的map函数一样
    注意result并不是你map_fun返回的结果,而是一个生成器,如果要从中去结果,你可以使用列表生成式或者其他你想使用的方法
  '''
  for res in result:
    print(res) #这个res就是你map_fun返回的结果,你可以在这里做进一步处理

使用submit+as_completed也可以很灵活

with ThreadPoolExecutor(max_workers=2) as executor:
  future= executor.submit(fun, args)
  '''
  在这里你可以使用for循环来做,返回的是一个future对象
  future_list=[]
  for i in range(max_workers):
    future= executor.submit(fun, args[i])
    future_list.append(future)
  '''
  for res in ac_completed(futrue_list): #这个futrure_list是你future对象的列表
    print(res.result())        #循环遍历时用.result()来取返回值

两种方式差不多,都可以很好的实现多线程任务,切记一定使用with!

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python标准库之循环器(itertools)介绍
Nov 25 Python
详解Python中的多线程编程
Apr 09 Python
python中argparse模块用法实例详解
Jun 03 Python
详解Python的Django框架中的Cookie相关处理
Jul 22 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
用python写扫雷游戏实例代码分享
May 27 Python
Python实现多线程的两种方式分析
Aug 29 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
基于Python的EasyGUI学习实践
May 07 Python
python 中[0]*2与0*2的区别说明
May 10 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 #Python
python 检查是否为中文字符串的方法
Dec 28 #Python
浅谈python3发送post请求参数为空的情况
Dec 28 #Python
python3使用flask编写注册post接口的方法
Dec 28 #Python
python通过tcp发送xml报文的方法
Dec 28 #Python
对python 生成拼接xml报文的示例详解
Dec 28 #Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 #Python
You might like
Terran建筑一览
2020/03/14 星际争霸
Yii2.0多文件上传实例说明
2017/07/24 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
JS 对象介绍
2010/01/20 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
vue cli 全面解析
2018/02/28 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python中的yield浅析
2014/06/16 Python
numpy返回array中元素的index方法
2018/06/27 Python
python实现自动化上线脚本的示例
2019/07/01 Python
Python2与Python3的区别点整理
2019/12/12 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
《蜗牛》教学反思
2014/02/18 职场文书
社区交通安全实施方案
2014/03/22 职场文书
请假条的格式
2014/04/11 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript