Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

目录

  • 一.Python 线程池前言
  • 二.Python 线程池原理
  • 三.Python 线程池 ThreadPoolExecutor 函数介绍
  • 四.Python 线程池 ThreadPoolExecutor 简单使用
  • 五.猜你喜欢

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

一.Python 线程池前言

在前面的文章中我们已经介绍了很多关于 Python 线程相关的知识点,比如 线程互斥锁 Lock / 线程事件 Event / 线程条件变量 Condition 等等,而今天给大家讲解的是 线程池 ThreadPoolExecutor,可能很多小伙伴会疑惑,threading 模块能创建线程,ThreadPoolExecutor 也能创建线程,两者都有什么区别呢?

众所周知,程序中使用线程会提高运行效率,虽然线程是计算机的最小单位,但是线程的创建和使用一样会占用计算机资源和产生开销,一旦创建成千上万的线程,计算机一样会死机!一个合理的程序永远都是以消耗最少的资源干最多的事,就像公司老板,永远都想以最少的钱,招最少的人,干最多的事!

哪个二货在背后说我

二.Python 线程池原理

大家都使用过迅雷下载,当同时下载 1000 个任务甚至更多的时候,就算开通 vip 同时下载的数量也只有 8 个。如果同时创建 1000 个线程,首先对计算器的开销也很大,而且每次只运行 8 个线程,需要不停的创建和销毁,这样会显得很麻烦。

而使用线程池 ThreadPoolExecutor 就可以解决上面的问题,其实只需要 8 个线程就行了,每个线程各分配一个任务,剩下的任务排队等待,当某个线程完成了任务的时候,排队任务就可以安排给这个线程继续执行,这就是所谓的线程池 ThreadPoolExecutor 原理!

三.Python 线程池 ThreadPoolExecutor 函数介绍

  • 1.ThreadPoolExecutor 构造实例的时候,传入 max_workers 参数来设置线程池中最多能同时运行的线程数目。
  • 2.使用 submit 函数来提交线程需要执行的任务(函数名和参数)到线程池中,并返回该任务的句柄(类似于文件、画图),注意 submit 不是阻塞的,而是立即返回。
  • 3.通过 submit 函数返回的任务句柄,能够使用 done 方法判断该任务是否结束。下面的例子可以看出,由于任务有 2s 的延时,在 task1 提交后立刻判断, task1 还未完成,而在延时 4s 之后判断,task1 就完成了。
  • 4.使用 cancel 方法可以取消提交的任务,如果任务已经在线程池中运行了,就取消不了。这个例子中,线程池的大小设置为 2 ,任务已经在运行了,所以取消失败。如果改变线程池的大小为 1 ,那么先提交的是 task1,task2 还在排队等候,这是时候就可以成功取消。
  • 5.使用 result 方法可以获取任务的返回值,注意:这个方法是阻塞的。

四.Python 线程池 ThreadPoolExecutor 简单使用

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 线程池 ThreadPoolExecutor.py
@Time:2021/05/05 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""from concurrent.futures import ThreadPoolExecutor
import time# 参数times用来模拟下载的时间
def down_video(times):time.sleep(times)print("down video {}s finished".format(times))return timesexecutor = ThreadPoolExecutor(max_workers=2)
# 通过submit函数提交执行的函数到线程池中,submit函数立即返回,不阻塞
task1 = executor.submit(down_video, (3))
task2 = executor.submit(down_video, (2))
# done方法用于判定某个任务是否完成
print("任务1是否已经完成:",task1.done())
# cancel方法用于取消某个任务,该任务没有放入线程池中才能取消成功
print("取消任务2:",task2.cancel())
time.sleep(4)
print("任务1是否已经完成:",task1.done())
# result方法可以获取task的执行结果
print(task1.result())'''
输出结果:任务1是否已经完成: False
取消任务2: False
down video 2s finished
down video 3s finished
任务1是否已经完成: True
3
'''

线程池 ThreadPoolExecutor 使用远不止如此,由于篇幅有限,关于线程池 as_completed / map / wait 函数和线程池的阻塞和执行顺序相关介绍请参考Python 线程池 ThreadPoolExecutor(二)

五.猜你喜欢

  1. Python 条件推导式
  2. Python 列表推导式
  3. Python 字典推导式
  4. Python 函数声明和调用
  5. Python 不定长参数 *argc/**kargcs
  6. Python 匿名函数 lambda
  7. Python return 逻辑判断表达式
  8. Python 字符串/列表/元组/字典之间的相互转换
  9. Python 局部变量和全局变量
  10. Python type 函数和 isinstance 函数区别
  11. Python is 和 == 区别
  12. Python 可变数据类型和不可变数据类型
  13. Python 浅拷贝和深拷贝
  14. Python 文件读写操作
  15. Python 异常处理
  16. Python 模块 import
  17. Python __name__ == ‘__main__’详细解释
  18. Python 线程创建和传参
  19. Python 线程互斥锁 Lock
  20. Python 线程事件 Event
  21. Python 线程条件变量 Condition
  22. Python 线程定时器 Timer
  23. Python 线程信号量 Semaphore
  24. Python 线程障碍对象 Barrier
  25. Python 线程队列 Queue – FIFO
  26. Python 线程队列 LifoQueue – LIFO
  27. Python 线程优先队列 PriorityQueue

未经允许不得转载:猿说编程 » Python 线程池 ThreadPoolExecutor(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cloud一分钟 | 成本大增致谷歌财报蒙尘;Gartner发数据库魔力象限:阿里云成为黑马...

Hello,everyone:10月31日早,星期三,祝大家万圣节快乐!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学…

Python实现AES加密进行PKCS5Padding的填充

Python实现AES加密进行PKCS5Padding的填充 (1)Python 需要导入的模块 (2)AES加密代码 (3)AES解密代码 (4)测试代码 (5)测试结果

Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

目录 一.Python 线程池前言二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用2.线程池 map 函数使用3.线程池 wait 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python 线程池前言 紧接着上…

Cloud一分钟 | 马云发表致股东的公开信;5G算什么?中国已着手研究6G相关工作...

Hello,everyone:11月01日早,星期四,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…

BugkuCTF-Reverse题First_Mobile(xman)

知识点 1.getByte() 功能:返回字符的ascii码值 2.equals() 功能:用于将字符串与指定的对象比较。 结果:相等时返回true,反之返回false 下载apk文件 使用jeb3打开反编译代码 分析,程序将editText里的内容进行一次encode.check检…

Python 进程 Process 模块 - Python零基础入门教程

目录 一.Python 进程 Process 简介二.Python 进程 Process 模块三.Python 进程 Process 函数介绍四.Python 进程 Process 使用五.Python 进程 Process 小窍门六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python 进程 Process 简介…

马云、张小龙、雷军缅怀金庸:江湖路远,侠义长存!

金庸走了!这个秋天,我们告别了太多公众人物。有网友说,“切切实实地感受到,一个时代过去了”。而成年的我们,注定要面临更多的失去。然而,一代兴起,一代离开,又是一种必然。斯人已去…

BugkuCTF-Reverse题LoopAndLoop(阿里CTF)

下载apk文件 先解压安装下看看什么情况 打开文件,得到一个LoopAndLoop的apk,打开进去,让输密码,点击按钮,可以看到Not Right!或者Not a valid integer number的提示,显然,只要找到密码,找到flag…

Python 进程 Process 与线程 threading 区别 - Python零基础入门教程

目录 一.Python 线程 threading 创建二.Python 进程 Process 创建三.Python 进程 Process 和线程 threading 区别四.Python 进程 Process 并行五.Python 线程 threading 并发六.猜你喜欢 一.Python 线程 threading 创建 对于 Python 线程相关的函数本文不再做详细讲解&#…

Cloud一分钟 | 腾讯打造云启商学院,马化腾将担任荣誉院长;阿里巴巴:2018财年云计算收入同比增长101%...

Hello,everyone:11月02日早,星期五,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…

BugkuCTF-Crypto题easy_crypto

下载文件file.zip 解压得到010.txt 打开为摩尔斯电码 通过ctf.ssleye.com/morse.html解码 得到flag%u7bm0rse_code_1s_interest1n9!%u7d 去掉%u7b与%u7d

Python 进程间通信 Queue / Pipe - Python零基础入门教程

目录 一.前言 1.使用 Queue 线程间通信2.使用 Queue 进程间通信,适用于多个进程之间通信3.使用 Pipe 进程间通信,适用于两个进程之间通信(一对一) 二.python 进程间通信 Queue/Pipe 使用 1.使用 Queue 进程间通信2.使用 Pipe 进程…

GitHub服务中断24小时11分钟事故分析报告

来源 | The GitHub Blog译者 | 无明UTC 时间 10 月 21 日 22:52,为了更换发生故障的 100G 光纤设备,美国东海岸网络中心与美国东海岸数据中心之间的连接被断开。连接在 43 秒后恢复,但这次短暂的中断引发了一系列事故,导致 24 小时…

Python 进程互斥锁 Lock - Python零基础入门教程

目录 一.Python 线程互斥锁和进程互斥锁 1.创建线程互斥锁2.创建进程互斥锁 二.进程互斥锁 Lock 函数介绍三.进程互斥锁 Lock 使用 案例一:使用进程,但不使用互斥锁案例二:进程互斥锁的使用案例三:对全局变量累计求和看看计算结果 四.猜你喜…

BugkuCTF-Crypto题MathEnglish

题目hint:口语需要读出来? 下载文件,打开 得到一些数字: 21 33 1 22 3 44 54 5 1 35 54 3 35 41 52 13 出题人给了hint2,让我们往元音上想 然后找到了一篇元音密码的文章 简单替换一下得到flag:bugku{yuanyinpwd}

Cloud一分钟|茅台4.5亿入股云上贵州大数据,后者已接管苹果中国iCloud; 阿里云进入印度市场,增长速度远超当地平均水平...

Hello,everyone:11月05日早,星期一,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…

BugkuCTF-WEB题文件包含

1.打开网页,点击click me? no链接 URL栏里显示:http://114.67.246.176:15077/index.php?fileshow.php,可能存在文件包含漏洞 这里介绍一下:php:// 协议 条件: allow_url_fopen:off/on allow_url_include :仅php:…

Python 进程池 multiprocessing.Pool - Python零基础入门教程

目录 一.Python 进程池 multiprocessing.Pool 介绍二.Python 进程池 multiprocessing.Pool 使用三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 Python 进程池 Pool 和前面讲解的** Python 线程池** 类似,虽然使用多进程能提…

Cloud一分钟 | Facebook隐私泄露事件继续发酵,黑客明码标价出售聊天信息

Hello,everyone:11月06日早,星期二,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…

php:// 协议

这里介绍一下:php:// 协议 条件: allow_url_fopen:off/on allow_url_include :仅php://input php://stdin php://memory php://temp 需要on 作用: php:// 访问各个输入/输出流(I/O streams),在CTF里经常…