线程池的两张方法 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 线程池实用总结的更多相关文章

  1. 自定义高级版python线程池

    基于简单版创建类对象过多,现自定义高级版python线程池,代码如下 #高级线程池 import queue import threading import time StopEvent = obje ...

  2. 对Python线程池

    本文对Python线程池进行详细说明介绍,IDE选择及编码的解决方案进行了一番详细的描述,实为Python初学者必读的Python学习经验心得. AD: 干货来了,不要等!WOT2015 北京站演讲P ...

  3. Python 线程池(小节)

    Python 线程池(小节) from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import os,time, ...

  4. python线程池ThreadPoolExecutor(上)(38)

    在前面的文章中我们已经介绍了很多关于python线程相关的知识点,比如 线程互斥锁Lock / 线程事件Event / 线程条件变量Condition 等等,而今天给大家讲解的是 线程池ThreadP ...

  5. python线程池及其原理和使用

    python线程池及其原理和使用 2019-05-29 17:05:20 whatday 阅读数 576 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很 ...

  6. python线程池示例

    使用with方式创建线程池,任务执行完毕之后,会自动关闭资源 , 否则就需要手动关闭线程池资源  import threading, time from concurrent.futures impo ...

  7. Python线程池与进程池

    Python线程池与进程池 前言 前面我们已经将线程并发编程与进程并行编程全部摸了个透,其实我第一次学习他们的时候感觉非常困难甚至是吃力.因为概念实在是太多了,各种锁,数据共享同步,各种方法等等让人十 ...

  8. python线程池实现

    python 的线程池主要有threadpool,不过它并不是内置的库,每次使用都需要安装,而且使用起来也不是那么好用,所以自己写了一个线程池实现,每次需要使用直接import即可.其中还可以根据传入 ...

  9. 《转》python线程池

    线程池的概念是什么? 在IBM文档库中这样的一段描写:“在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是 如此,虚拟机将试图跟踪每一个对象 ...

随机推荐

  1. vue 改变数据DOM不更新,获取不到DOM的解决方法

    1.获取不到DOM的解决方案(使用$nextTick) 定义:在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 理解:nextTick(),是将回调 ...

  2. C# 如何给 ValueTuple 返回值添加注释

    在 C# 7.0 可以在一个方法的返回,返回多个参数,通过 ValueTuple 的方法,但是和单个参数返回不同的是,如何对多个参数返回每个参数进行单独的注释? 如使用下面的代码,我尝试在一个方法返回 ...

  3. Linux 创建和销毁 urb

    struct urb 结构在驱动中必须不被静态创建, 或者在另一个结构中, 因为这可能破坏 USB 核心给 urb 使用的引用计数方法. 它必须使用对 usb_alloc_urb 函数的调用而被创 建 ...

  4. js window.open 页面之间的通讯(不同源)

    一:a页面1:打开b页面let isB= window.open('b.html','b'); 2:a页面发送消息给b页面     isB.postMessage("dsddfsdf&quo ...

  5. Tomcat 类加载器打破双亲委派模型

    我们分为4个部分来探讨: 1. 什么是类加载机制? 2. 什么是双亲委任模型? 3. 如何破坏双亲委任模型? 4. Tomcat 的类加载器是怎么设计的? 我想,在研究tomcat 类加载之前,我们复 ...

  6. nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)

    恩..nixyx确实算不上是一个构建系统. 所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分. 类似的软件还有:google的gyp.腾讯的 ...

  7. 使用宝塔搭建nextcloud的过程(搭建、优化、问题)

    宝塔部署教程 参考网址: 使用NextCloud来搭建我们的私有网盘.并结合Redis优化性能(宝塔) https://www.moerats.com/archives/175/ 宝塔面板下nextc ...

  8. Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)

    这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...

  9. 1077 互评成绩计算 (20 分)C语言

    在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平 ...

  10. C++简单项目--推箱子

    在处理移动的时候有太多种情况了: 1.有空位 2.在推箱子,推到了空地 3.推箱子推到了目标, 4.推目标位的箱子推到另一个目标 5.推目标位的箱子推到空地 首先记录目标位置,在每次推动之后会再绘画中 ...