1、如何使用线程池?

    实际案例:

我们之前实现了一个多线程web视频监控服务器,我们需要对请求连接数做限制,以防止恶意用户发起大量连接而导致服务器创建大量线程,最终因资源耗尽而瘫痪。

可以使用线程池,替代原来的每次请求创建线程。

    解决方案:

python3中有线程池实现,使用标准库中concurrent.futures下的ThreadPoolExecutor,对象的submit和map方法可以用来启动线程池中线程执行任务。

    线程池介绍:

 线程池就是提前创建好某一固定数量的线程放到池子里面,需要使用的时候去这个池子中取一个线程出来让它执行任务,执行完以后再归还给线程池以便后面的任务继续使用线程。

2、代码演示

多线程池的简单使用

from concurrent.futures import ThreadPoolExecutor# 创建Executor对象,指定线程池中线程数
executor = ThreadPoolExecutor(3)# 使用线程池中线程执行任务
# 定义任务函数a的b次方
def f(a, b):print('f', a, b)return a ** b# 调用线程池中线程去执行函数
future = executor.submit(f, 2, 3)
# 使用线程池中一个线程运行这个函数,这个函数运行完以后
# 这个线程又会归还到线程池中去# 使用result得到函数的运行结果
print(future.result())
# 如果函数的运行事件比较长,在调用result的时候他还没有执行完,
# 这个result就会被阻塞到这里,直到这个函数运行完# 和python内置的map方法类似,只不过他在多个线程上同时调用f
# 在第1个线程计算2的4次方,第2个线程计算3的5次方,第3个线程计算5的6次方
executor.map(f, [2, 3, 5], [4, 5, 6])'''
假设当前线程池中所有线程都在忙碌,一直在运行函数并且没有返回,
我们再提交一个任务的时候,就会出现pending,
等待线程池中有一个空闲线程来运行它。
'''
import timedef f2(a, b):print('f2', a, b)time.sleep(10)# 等待10秒再返回return a ** b# 运行以下语句可以到,可以看到首先打印的'f2 2 4'、'f2 3 5'、'f2 5 6'
# 过了一会才把'f2 6 7'和'f2 7 8'打印出来,直到前面退出了他才得到运行权利
executor.map(f2, [2, 3, 5, 6, 7], [4, 5, 6, 7, 8])

Python线程池ThreadPoolExecutor详细介绍相关推荐

  1. Java自带的线程池ThreadPoolExecutor详细介绍说明和实例运用

    Java 5 开始,Java 提供了自己的线程池.线程池就是一个线程的容器,每次只执行额定数量的线程. java.util.concurrent.ThreadPoolExecutor 就是这样的线程池 ...

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

    目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...

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

    目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...

  4. python线程池wait_python线程池 ThreadPoolExecutor 的用法示例

    前言 从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进 ...

  5. python threadpoolexecutor_Python线程池ThreadPoolExecutor实践

    Python线程池ThreadPoolExecutor实践 2019年5月15日 23:00 by wst python高级 在使用ThreadPoolExecutor的过程中,一直想探索线程池会使用 ...

  6. Python线程池、进程池的介绍与使用

    文章目录 1.问题背景 2.单线程→\rightarrow→多线程→\rightarrow→线程池 2.1单线程简介 2.2多线程简介 2.3线程池介绍 2.3.1复用线程 2.3.2线程池的使用 3 ...

  7. python 线程池 concurrent.futures ThreadPoolExecutor

    python 线程池 concurrent.futures ThreadPoolExecutor 步骤: 1,导包from concurrent.futures import ThreadPoolEx ...

  8. 线程池ThreadPoolExecutor详解(整理详细)

    ThreadPoolExecutor 1.什么是线程池? (首先要理解什么是线程) 线程池,thread pool,是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务. 通 ...

  9. Java线程池—ThreadPoolExecutor

    2019独角兽企业重金招聘Python工程师标准>>> 为什么要使用线程池创建线程?     使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题 ...

  10. Python线程池与进程池

    Python线程池与进程池 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...

最新文章

  1. OpenGL绘制复杂图形
  2. 安装完python需要再安装编辑器-最好用的Python编辑器——Pycharm之安装与设置
  3. vue 滚动条_轻量级 React.js 虚拟美化滚动条组件RScroll
  4. C++11系列学习之五-------decltype
  5. java date 相差_java 比较时间相差多少分钟
  6. 源码包安装mysql5.6_源码包安装mysql5.6
  7. 手机腾讯视频软件如何开启护眼功能
  8. jquery 读取checkbox
  9. 在浏览器中执行Kettle job或者transformation
  10. Redis教程:数据对象分析(二)
  11. Android-SEAndroid权限问题指南
  12. 在centos上安装vmware14
  13. vue中eslint报Disallow self-closing on HTML void elements格式错误时的解决方案
  14. 重磅:2019 前端开发者进阶指南.pdf
  15. 快手协议/逆向开发ks协议
  16. java 二进制最大值_java int型最大值/最小值,最大值+1,最小值-1
  17. 《Shopee跨境电商运营实战》笔记(第5~8章)
  18. 大数据时代带来的伦理问题
  19. es(Elasticsearch)客户端Elasticsearch-head安装使用(04Elasticsearch-head安装篇)
  20. ICPR 2020 U∧2-Net之AI生成肖像画,精细到毛发!

热门文章

  1. java二级考试大纲_计算机二级Java考试内容大纲
  2. c语言生日创意代码_C语言如何编程生日快乐代码
  3. 用户名 不在 sudoers 文件中。此事将被报告。
  4. linux环境下vi编辑器的模式及模式切换方法,文件保存退出方法,Linux环境下vi/vim编辑器常用命令...
  5. 大一c语言程序设计计算器,C语言程序设计-课程设计《计算器程序》.docx
  6. 前端页面调试、抓包工具——spy-debugger
  7. How to build UDK2015?
  8. 40道JAVA经典算法面试题(答案)
  9. ArcgisPro3.0.1中文安装包下载及安装教程
  10. 浅析JBPM工作流引擎