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 用户登录验证的小例子
Mar 06 Python
Python闭包实现计数器的方法
May 05 Python
Python基础入门之seed()方法的使用
May 15 Python
Python统计文件中去重后uuid个数的方法
Jul 30 Python
python实现井字棋游戏
Mar 30 Python
基于python的字节编译详解
Sep 20 Python
Python之批量创建文件的实例讲解
May 10 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
Python激活Anaconda环境变量的详细步骤
Jun 08 Python
python面向对象版学生信息管理系统
Jun 24 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代码DOS造成用光网络带宽
2011/03/01 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
python pandas生成时间列表
2019/06/29 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
管理部部长岗位职责
2013/12/05 职场文书
初中英语教学反思
2014/01/25 职场文书
个人实习生的自我评价
2014/02/16 职场文书
会计电算化专业求职信
2014/06/10 职场文书
监察建议书
2015/02/04 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
Go 中的空白标识符下划线
2022/03/25 Golang