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 创建子进程模块subprocess详解
Apr 08 Python
总结Python编程中函数的使用要点
Mar 20 Python
Python中__init__.py文件的作用详解
Sep 18 Python
Python 递归函数详解及实例
Dec 27 Python
python生成随机图形验证码详解
Nov 08 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
Python3.5集合及其常见运算实例详解
May 01 Python
QML使用Python的函数过程解析
Sep 26 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
python怎么自定义捕获错误
Jun 29 Python
利用Python批量识别电子账单数据的方法
Feb 08 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实现ODBC数据分页显示一例
2006/10/09 PHP
PHP 开源AJAX框架14种
2009/08/24 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
node中koa中间件机制详解
2017/08/22 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
Python批量查询域名是否被注册过
2017/06/21 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
卫校中专生个人自我评价
2013/09/19 职场文书
大学军训感言400字
2014/03/11 职场文书
妇女工作先进事迹
2014/08/17 职场文书