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聊天程序实例代码分享
Nov 18 Python
Python的subprocess模块总结
Nov 07 Python
python3实现暴力穷举博客园密码
Jun 19 Python
Python基于time模块求程序运行时间的方法
Sep 18 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
python之django母板页面的使用
Jul 03 Python
python中的json总结
Oct 11 Python
解决pycharm运行出错,代码正确结果不显示的问题
Nov 30 Python
妙用itchat! python实现久坐提醒功能
Nov 25 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
Python文件名匹配与文件复制的实现
Dec 11 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
JpGraph php柱状图使用介绍
2011/08/23 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
使用Python写CUDA程序的方法
2017/03/27 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
python安装scipy的方法步骤
2019/06/26 Python
python编写猜数字小游戏
2019/10/06 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
人事部经理岗位职责
2014/03/07 职场文书
最新离婚协议书范本
2014/08/19 职场文书
重阳节慰问信
2015/02/15 职场文书
教师党员个人自我评价
2015/03/04 职场文书
通知函格式范文
2015/04/27 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
python通过新建环境安装tfx的问题
2022/05/20 Python