Python线程池ThreadPoolExecutor使用方式

 更新时间:2024年02月10日 09:24:47   作者:AllardZhao  
这篇文章主要介绍了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])

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • PyTorch中torch.no_grad()用法举例详解

    PyTorch中torch.no_grad()用法举例详解

    这篇文章主要介绍了PyTorch中torch.no_grad()用法的相关资料,torch.no_grad()是PyTorch的上下文管理器,用于临时禁用自动梯度计算,减少内存消耗并加快计算速度,它适用于模型评估或推理阶段,可以显著提高效率,需要的朋友可以参考下
    2024-09-09
  • Python利用pangu模块实现文本格式化小工具

    Python利用pangu模块实现文本格式化小工具

    其实使用pangu做文本格式标准化的业务代码在之前就实现了,主要能够将中文文本文档中的文字、标点符号等进行标准化。但是为了方便起来我们这里使用了Qt5将其做成了一个可以操作的页面应用,需要的可以了解一下
    2022-10-10
  • Python简单实现词云图代码及步骤解析

    Python简单实现词云图代码及步骤解析

    这篇文章主要介绍了Python简单实现词云图代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 对Python3 goto 语句的使用方法详解

    对Python3 goto 语句的使用方法详解

    今天小编就为大家分享一篇对Python3 goto 语句的使用方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 将字典转换为DataFrame并进行频次统计的方法

    将字典转换为DataFrame并进行频次统计的方法

    下面小编就为大家分享一篇将字典转换为DataFrame并进行频次统计的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python基础之字符串格式化详解

    Python基础之字符串格式化详解

    这篇文章主要介绍了Python基础之字符串格式化详解,文中有非常详细的代码示例,对正在学习python基础的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-04-04
  • python3基于TCP实现CS架构文件传输

    python3基于TCP实现CS架构文件传输

    这篇文章主要为大家详细介绍了python3基于TCP实现CS架构文件传输,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • pytorch模型的保存加载与续训练详解

    pytorch模型的保存加载与续训练详解

    这篇文章主要为大家介绍了pytorch模型的保存加载与续训练详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Python纯代码通过神经网络实现线性回归的拟合方式

    Python纯代码通过神经网络实现线性回归的拟合方式

    这篇文章主要介绍了Python纯代码通过神经网络实现线性回归的拟合方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python selenium文件上传方法汇总

    Python selenium文件上传方法汇总

    这篇文章主要为大家详细介绍了Python selenium文件上传方法,selenium文件上传的所有方法进行整理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论