线程池的两张方法 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. Jenkins 配置自动合并 release 分支到 master 分支

    本文告诉大家如何在 Jenkins 配置合并到 release 的内容自动合并到 gitlab 的 master 分支 首先需要两个仓库,一个是 gitlab 的仓库,另一个是 Jenkins 的仓库 ...

  2. 用webAudio和canvas实现音频可视化

    前两天遇到了要显示音频波形图的需求,因为时间紧,就直接用了wavesufer.js,这两天有空,就研究了一下怎么用webAudio实现音频的可视化. 大致流程是对音源进行解析,解析得到的数据是个频谱数 ...

  3. 2019-3-8-为何使用-DirectComposition

    title author date CreateTime categories 为何使用 DirectComposition lindexi 2019-3-8 8:56:9 +0800 2018-04 ...

  4. linux 操作 I/O 端口

      在驱动硬件请求了在它的活动中需要使用的 I/O 端口范围之后, 它必须读且/或写到这些 端口. 为此, 大部分硬件区别 8-位, 16-位, 和 32-位端口. 常常你无法混合它们, 象你 正常使 ...

  5. 【21.00%】【vijos P1018】智破连环阵

    描述 B国在耗资百亿元之后终于研究出了新式武器--连环阵(Zenith Protected Linked Hybrid Zone).传说中,连环阵是一种永不停滞的自发性智能武器.但经过A国间谍的侦察发 ...

  6. jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(二)

    引言:首先我们可以实现一键部署网站,但在实际生产环境网站部署完成之后,我们的开发隔三差五要修改下网站的内容,难道都要我们运维手动执行命令吗?没有一种方法使得开发人员修改完代码自己测试,部署上线呢,那这 ...

  7. ABP在MultipleDbContext也就是多库的场景下发布后异常“Could not find content root folder”问题处理

    ABP多库支持 ABP支持多库的方案在abp的案例中aspnetboilerplate-samples中给了现成的demo,其中MultipleDbContextDemo是EF的相关针对dotnet的 ...

  8. SNOI2019

    题解: t1: 想了一会才会.. 以为是啥最小表示法之类的..然后这个我又不会 其实只要考虑一下a[i],a[i+1]之间的大小关系就行了 t2: 好像和题解不太一样.. 我的做法比较麻烦.. 枚举A ...

  9. Python9_类

    类的基础知识 属性:类变量.实例变量.方法:初始化方法 __init__  //初始化方法不是必须的:其他方法: //类的定义class Employee: empCount = 0 //类变量,有些 ...

  10. flask迁移数据库时报错:Target database is not up的解决方案

    在flask中进行数据库迁移时报错,报错信息为"Target database is not up",解决方案如下 找到alembic的最新版本号,找到文件夹migrate下的最新 ...