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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
Python实现去除代码前行号的方法
Mar 10 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
OpenCV实现人脸识别
Apr 07 Python
python多进程实现进程间通信实例
Nov 24 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
Dec 20 Python
Python实现的堆排序算法示例
Apr 29 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
python not运算符的实例用法
Jun 30 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打造属于自己的MVC框架
2012/03/07 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
python之django母板页面的使用
2018/07/03 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
python requests使用socks5的例子
2019/07/25 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
《地震中的父与子》教学反思
2014/04/10 职场文书