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中数字以及算数运算符的相关使用
Oct 12 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
PyQt5实现从主窗口打开子窗口的方法
Jun 19 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
pyhton中__pycache__文件夹的产生与作用详解
Nov 24 Python
安装PyInstaller失败问题解决
Dec 14 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 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 上传功能实例代码
2010/04/13 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PDO::errorCode讲解
2019/01/28 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
Exjs 入门篇
2010/04/07 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python中的__slots__使用示例
2015/02/26 Python
python解析xml文件实例分析
2015/05/27 Python
Python的Django框架中的Context使用
2015/07/15 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
Pytorch之finetune使用详解
2020/01/18 Python
python实现处理mysql结果输出方式
2020/04/09 Python
介绍一下JMS编程步骤
2015/09/22 面试题
入党自我鉴定范文
2013/10/04 职场文书
地震慰问信
2015/02/14 职场文书
会计工作检讨书
2015/02/19 职场文书
物流业务员岗位职责
2015/04/03 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
债务纠纷代理词
2015/05/25 职场文书
2016五一手机促销广告语
2016/01/28 职场文书