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 相关文章推荐
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
用Python写冒泡排序代码
Apr 12 Python
Python字符串拼接、截取及替换方法总结分析
Apr 13 Python
python模拟Django框架实例
May 17 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
pytorch实现MNIST手写体识别
Feb 14 Python
logging level级别介绍
Feb 21 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
python raise的基本使用
Sep 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
php中ob函数缓冲机制深入理解
2015/08/03 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
深入理解vue中的$set
2017/06/01 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python的Django框架使用入门指引
2015/04/15 Python
python reduce 函数使用详解
2017/12/05 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
网上卖盒饭创业计划书范文
2014/02/07 职场文书
六一亲子活动总结
2014/07/01 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
pandas求平均数和中位数的方法实例
2021/08/04 Python
Python Django模型详解
2021/10/05 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python