线程池的两张方法 submit 和map

  1. from concurrent.futures import ThreadPoolExecutor
  2. import time
  3.  
  4. #
  5.  
  6. def sayhello(a):
  7. time.sleep(2)
  8. return "hello: "+a
  9.  
  10. def main():
  11. seed = ["a","b","c"]
  12. # 不使用线程
  13. start1 = time.time()
  14. for each in seed:
  15. t1 = sayhello(each)
  16. print(t1)
  17. end1 = time.time()
  18. print("time1: "+str(end1-start1))
  19. print('------------------submit----------------------')
  20. # 线程池submit用法
  21. # 1.先把值存放在列表中
  22. # 2.在遍历列表取返回值
  23. # 3.将遍历获取的结果存放在列表中
  24. start2 = time.time()
  25. lst = []
  26. result_lst = []
  27. with ThreadPoolExecutor(3) as executor:
  28. for each in seed:
  29. t2 = executor.submit(sayhello, each)
  30. lst.append(t2)
  31. for i in lst:
  32. print(i.result())
  33. result_lst.append(i.result())
  34. print(result_lst)
  35. end2 = time.time()
  36. print("time2: "+str(end2-start2))
  37.  
  38. print('---------------map----------------------')
  39. # 线程池map的用法
  40. # map的参数:迭代器
  41. # map的返回值是:生成器
  42. # 1、获取生成器(或直接使用list强制装换)
  43. # 2、遍历取值
  44. # 3、将遍历的结果放入新的列表
  45. map_lst = []
  46. start3 = time.time()
  47. with ThreadPoolExecutor(3) as executor1:
  48. t3 = executor1.map(sayhello, seed)
  49. for t in t3:
  50. map_lst.append(t)
  51. print(map_lst)
  52. end3 = time.time()
  53. print("time3: "+str(end3-start3))
  54.  
  55. if __name__ == '__main__':
  56. main()

other

  1. from concurrent.futures import ThreadPoolExecutor
  2. import time
  3.  
  4. #
  5.  
  6. def sayhello(a):
  7. time.sleep(2)
  8. foo = [1, a]
  9. return foo
  10.  
  11. def main():
  12. seed = ["a","b","c"]
  13. # 不使用线程
  14. start1 = time.time()
  15. for each in seed:
  16. t1 = sayhello(each)
  17. print(t1)
  18. end1 = time.time()
  19. print("time1: "+str(end1-start1))
  20.  
  21. print('---------------map----------------------')
  22. # 线程池map的用法
  23. # map 的结果是迭代器,使用for循环取值
  24. map_lst = []
  25. start3 = time.time()
  26. with ThreadPoolExecutor(3) as executor1:
  27. t3 = executor1.map(sayhello, seed)
  28. for t in t3:
  29. map_lst.extend(t)
  30. print(map_lst)
  31. end3 = time.time()
  32. print("time3: "+str(end3-start3))
  33.  
  34. if __name__ == '__main__':
  35. main()

区别

  1. map:
  2. 1、提交的任务的函数是一样的
  3. 2、参数:只需要提交一次目标函数,目标函数的参数放在一个迭代器(列表,字典)
  4. submit:
  5. 1、提交的任务函数是不一样的,或者执行的过程之可能出现异常(使用map执行过程中发现问题会直接抛出错误)
  6. 2、参数:submit每次都需要提交一个目标函数和对应的参数
  7.  
  8. 结果:
  9. 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. element-ui tree 根据不同叶子节点设置是否显示复选框

    公司业务要求不同根节点配置显示与否复选框,官方文档没有这样的配置,所以想到了修改element-ui源码. 1.这里将“node_modules\element-ui\packages”下的tree文 ...

  2. 【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 ...

  3. 纯CSS制作空心三角形和实心三角形及其实现原理

    纯CSS制作空心三角形和实心三角形及其实现原理 在一次项目中需要使用到空心三角形,我瞬间懵逼了.查阅了一些资料加上自己的分析思考,终于是达到了效果,个人感觉制作三角形是使用频率很高的,因此记录下来,供 ...

  4. 思数云hadoop目录

    全文检索.数据分析挖掘.推荐系统.广告系统.图像识别.海量存储.快速查询 l Hadoop介绍 n Hadoop来源与历史 n Hadoop版本 n Hadoop开源与商业 l HDFS系统架构 n ...

  5. PDF.JS 读取文件流前端展示 C#

    最近再搞PDF得展示问题,因为aspose.pdf成本太高,只能使用pdf.js这个开源强大的前端东东了. 在百度了很久后 网上大都是node,java,php的事例,有位大哥的是C#的后台代码按他写 ...

  6. k8s的网络方案对比

    如下图,三台虚拟机k8s-master.k8s-node-1.k8s-node-2组成k8s集群,网络拓扑和节点IP分配如下图: 一.flannel组网方案 https://github.com/co ...

  7. 【Docker】镜像分层存储与镜像精简

    Linux操作系统 Linux操作系统由内核空间和用户空间组成. 内核空间是kernel,用户空间是rootfs, 不同Linux发行版的区别主要是rootfs.比如 Ubuntu 14.04 使用 ...

  8. vim 方式快捷编辑代码

    说明 **I: ** 行首插入 **a: ** 追加 **A: ** 行尾插入 **R: ** 替换文字 **v: ** 选择 **ctrl-v: ** 选择举行区域 **x: ** 删除 **dd: ...

  9. jdbc链接Oracle数据库的封装

    在src下创建properties文件 driver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@//127.0.0.1:1521/XEu ...

  10. markdown设置编辑基本语法

    看到其他人写的东西,版面设计,文字样式,区域划分都是那么好看,我一直不知道是怎么设计的,今天发现了,做以记录. #一.设置Markdown编辑模式 二.Markdown编辑语法 一.标题 在想要设置为 ...