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(二)
五.猜你喜欢
- Python 条件推导式
- Python 列表推导式
- Python 字典推导式
- Python 函数声明和调用
- Python 不定长参数 *argc/**kargcs
- Python 匿名函数 lambda
- Python return 逻辑判断表达式
- Python 字符串/列表/元组/字典之间的相互转换
- Python 局部变量和全局变量
- Python type 函数和 isinstance 函数区别
- Python is 和 == 区别
- Python 可变数据类型和不可变数据类型
- Python 浅拷贝和深拷贝
- Python 文件读写操作
- Python 异常处理
- Python 模块 import
- Python __name__ == ‘__main__’详细解释
- Python 线程创建和传参
- Python 线程互斥锁 Lock
- Python 线程事件 Event
- Python 线程条件变量 Condition
- Python 线程定时器 Timer
- Python 线程信号量 Semaphore
- Python 线程障碍对象 Barrier
- Python 线程队列 Queue – FIFO
- Python 线程队列 LifoQueue – LIFO
- Python 线程优先队列 PriorityQueue
未经允许不得转载:猿说编程 » Python 线程池 ThreadPoolExecutor(一)
Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程相关推荐
- Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程
目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...
- Python 进程池 multiprocessing.Pool - Python零基础入门教程
目录 一.Python 进程池 multiprocessing.Pool 介绍 二.Python 进程池 multiprocessing.Pool 使用 三.猜你喜欢 零基础 Python 学习路线推 ...
- Python 线程障碍对象 Barrier - Python零基础入门教程
目录 一.Python 线程障碍对象 Barrier 简介 二.Python 线程障碍对象 Barrier 原理 三.Python 线程障碍对象 Barrier 函数介绍 四.Python 线程障碍对 ...
- Python 进程 Process 与线程 threading 区别 - Python零基础入门教程
目录 一.Python 线程 threading 创建 二.Python 进程 Process 创建 三.Python 进程 Process 和线程 threading 区别 四.Python 进程 ...
- Python globals 函数 - Python零基础入门教程
目录 一.Python globals 函数语法 二.Python globals 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Pytho ...
- Python locals 函数 - Python零基础入门教程
目录 一.locals 函数语法 二.locals 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.locals ...
- Python reduce 函数 - Python零基础入门教程
目录 一.Python reduce 函数简介 1.reduce 函数语法 2.reduce 函数原理 二.Python reduce 函数使用 1.reduce 函数普通使用 2.reduce 函数 ...
- Python chr 函数 - Python零基础入门教程
目录 一.Python chr 函数简介 二.Python chr 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一 ...
- Python GIL 锁 - Python零基础入门教程
目录 一.并行和并发 二.GIL 锁 案例一:单核多线程 案例二:单核多线程 案例三:双核多线程 三.如何解决 GIL 锁问题 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习 ...
最新文章
- azure存储压力测试
- altium designer PCB 屏蔽DRC报错
- python中分支结构有几种各有什么特点_「武鹏有课」Python分支结构的种类
- k8s概念: service和ingress
- python爬虫小工具——editplus
- 南阳理工acm1043高数
- html页面获取扫码枪参数,js获取扫码枪输入数据的方法
- Rational Rose 2007安装及License Key Error问题的解决
- TLS 系统默认版本.NET Framework 3.5.1 Windows 7 SP1 和 Server 2008 R2 SP1 中包含的支持
- [DownUnderCTF 2022] crypto部分复现
- Java极光短信发送
- 想象力无限,人工智能时代你对AGV有什么期许
- 思绪——关于《朝花夕誓——于离别之朝束起约定之花》
- 如何同时使用内网(本地有线连接)和外网(WLAN无线连接)
- Win7桌面怎么显示我的电脑图标
- 《微观经济学》 第七章
- Unity项目技术方案Dots架构方案简介
- 计算机专业毕业论文java毕业设计开题报告基于SpringBoot的阳光线上交友系统
- Keras如何保存、加载Keras模型
- idea中Tomcat的使用