python 线程池实用总结
线程池的两张方法 submit 和map
- from concurrent.futures import ThreadPoolExecutor
- import time
- #
- def sayhello(a):
- time.sleep(2)
- return "hello: "+a
- def main():
- seed = ["a","b","c"]
- # 不使用线程
- start1 = time.time()
- for each in seed:
- t1 = sayhello(each)
- print(t1)
- end1 = time.time()
- print("time1: "+str(end1-start1))
- print('------------------submit----------------------')
- # 线程池submit用法
- # 1.先把值存放在列表中
- # 2.在遍历列表取返回值
- # 3.将遍历获取的结果存放在列表中
- start2 = time.time()
- lst = []
- result_lst = []
- with ThreadPoolExecutor(3) as executor:
- for each in seed:
- t2 = executor.submit(sayhello, each)
- lst.append(t2)
- for i in lst:
- print(i.result())
- result_lst.append(i.result())
- print(result_lst)
- end2 = time.time()
- print("time2: "+str(end2-start2))
- print('---------------map----------------------')
- # 线程池map的用法
- # map的参数:迭代器
- # map的返回值是:生成器
- # 1、获取生成器(或直接使用list强制装换)
- # 2、遍历取值
- # 3、将遍历的结果放入新的列表
- map_lst = []
- start3 = time.time()
- with ThreadPoolExecutor(3) as executor1:
- t3 = executor1.map(sayhello, seed)
- for t in t3:
- map_lst.append(t)
- print(map_lst)
- end3 = time.time()
- print("time3: "+str(end3-start3))
- if __name__ == '__main__':
- main()
other
- from concurrent.futures import ThreadPoolExecutor
- import time
- #
- def sayhello(a):
- time.sleep(2)
- foo = [1, a]
- return foo
- def main():
- seed = ["a","b","c"]
- # 不使用线程
- start1 = time.time()
- for each in seed:
- t1 = sayhello(each)
- print(t1)
- end1 = time.time()
- print("time1: "+str(end1-start1))
- print('---------------map----------------------')
- # 线程池map的用法
- # map 的结果是迭代器,使用for循环取值
- map_lst = []
- start3 = time.time()
- with ThreadPoolExecutor(3) as executor1:
- t3 = executor1.map(sayhello, seed)
- for t in t3:
- map_lst.extend(t)
- print(map_lst)
- end3 = time.time()
- print("time3: "+str(end3-start3))
- if __name__ == '__main__':
- main()
区别
- map:
- 1、提交的任务的函数是一样的
- 2、参数:只需要提交一次目标函数,目标函数的参数放在一个迭代器(列表,字典)
- submit:
- 1、提交的任务函数是不一样的,或者执行的过程之可能出现异常(使用map执行过程中发现问题会直接抛出错误)
- 2、参数:submit每次都需要提交一个目标函数和对应的参数
- 结果:
- map可以保证输出的顺序, submit输出的顺序是乱的
python 线程池实用总结的更多相关文章
- 自定义高级版python线程池
基于简单版创建类对象过多,现自定义高级版python线程池,代码如下 #高级线程池 import queue import threading import time StopEvent = obje ...
- 对Python线程池
本文对Python线程池进行详细说明介绍,IDE选择及编码的解决方案进行了一番详细的描述,实为Python初学者必读的Python学习经验心得. AD: 干货来了,不要等!WOT2015 北京站演讲P ...
- Python 线程池(小节)
Python 线程池(小节) from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import os,time, ...
- python线程池ThreadPoolExecutor(上)(38)
在前面的文章中我们已经介绍了很多关于python线程相关的知识点,比如 线程互斥锁Lock / 线程事件Event / 线程条件变量Condition 等等,而今天给大家讲解的是 线程池ThreadP ...
- python线程池及其原理和使用
python线程池及其原理和使用 2019-05-29 17:05:20 whatday 阅读数 576 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很 ...
- python线程池示例
使用with方式创建线程池,任务执行完毕之后,会自动关闭资源 , 否则就需要手动关闭线程池资源 import threading, time from concurrent.futures impo ...
- Python线程池与进程池
Python线程池与进程池 前言 前面我们已经将线程并发编程与进程并行编程全部摸了个透,其实我第一次学习他们的时候感觉非常困难甚至是吃力.因为概念实在是太多了,各种锁,数据共享同步,各种方法等等让人十 ...
- python线程池实现
python 的线程池主要有threadpool,不过它并不是内置的库,每次使用都需要安装,而且使用起来也不是那么好用,所以自己写了一个线程池实现,每次需要使用直接import即可.其中还可以根据传入 ...
- 《转》python线程池
线程池的概念是什么? 在IBM文档库中这样的一段描写:“在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是 如此,虚拟机将试图跟踪每一个对象 ...
随机推荐
- element-ui tree 根据不同叶子节点设置是否显示复选框
公司业务要求不同根节点配置显示与否复选框,官方文档没有这样的配置,所以想到了修改element-ui源码. 1.这里将“node_modules\element-ui\packages”下的tree文 ...
- 【js】react-native Could not find iPhone 6 simulator 和 Entry, ":CFBundleIdentifier", Does Not Exist 两种报错解决办法
一.在运行rn app应用时,react-native run:ios 报错出现 Could not find iPhone 6 simulator 解决办法: 1.react-native r ...
- 纯CSS制作空心三角形和实心三角形及其实现原理
纯CSS制作空心三角形和实心三角形及其实现原理 在一次项目中需要使用到空心三角形,我瞬间懵逼了.查阅了一些资料加上自己的分析思考,终于是达到了效果,个人感觉制作三角形是使用频率很高的,因此记录下来,供 ...
- 思数云hadoop目录
全文检索.数据分析挖掘.推荐系统.广告系统.图像识别.海量存储.快速查询 l Hadoop介绍 n Hadoop来源与历史 n Hadoop版本 n Hadoop开源与商业 l HDFS系统架构 n ...
- PDF.JS 读取文件流前端展示 C#
最近再搞PDF得展示问题,因为aspose.pdf成本太高,只能使用pdf.js这个开源强大的前端东东了. 在百度了很久后 网上大都是node,java,php的事例,有位大哥的是C#的后台代码按他写 ...
- k8s的网络方案对比
如下图,三台虚拟机k8s-master.k8s-node-1.k8s-node-2组成k8s集群,网络拓扑和节点IP分配如下图: 一.flannel组网方案 https://github.com/co ...
- 【Docker】镜像分层存储与镜像精简
Linux操作系统 Linux操作系统由内核空间和用户空间组成. 内核空间是kernel,用户空间是rootfs, 不同Linux发行版的区别主要是rootfs.比如 Ubuntu 14.04 使用 ...
- vim 方式快捷编辑代码
说明 **I: ** 行首插入 **a: ** 追加 **A: ** 行尾插入 **R: ** 替换文字 **v: ** 选择 **ctrl-v: ** 选择举行区域 **x: ** 删除 **dd: ...
- jdbc链接Oracle数据库的封装
在src下创建properties文件 driver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@//127.0.0.1:1521/XEu ...
- markdown设置编辑基本语法
看到其他人写的东西,版面设计,文字样式,区域划分都是那么好看,我一直不知道是怎么设计的,今天发现了,做以记录. #一.设置Markdown编辑模式 二.Markdown编辑语法 一.标题 在想要设置为 ...