当前位置:
首页 > Python基础教程 >
-
Python线程池ThreadPoolExecutor使用方式
这篇文章主要介绍了Python线程池ThreadPoolExecutor使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
如何使用线程池?
实际案例
我们之前实现了一个多线程web视频监控服务器,我们需要对请求连接数做限制,以防止恶意用户发起大量连接而导致服务器创建大量线程,最终因资源耗尽而瘫痪。
可以使用线程池,替代原来的每次请求创建线程。
解决方案
python3中有线程池实现,使用标准库中concurrent.futures下的ThreadPoolExecutor,对象的submit和map方法可以用来启动线程池中线程执行任务。
线程池介绍:
线程池就是提前创建好某一固定数量的线程放到池子里面,需要使用的时候去这个池子中取一个线程出来让它执行任务,执行完以后再归还给线程池以便后面的任务继续使用线程。
代码演示
多线程池的简单使用
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 time
def 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])
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://xiaokang.blog.csdn.net/article/details/124754919
栏目列表
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
开启SQLSERVER数据库缓存依赖优化网站性能
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比