当前位置: 首页 > article >正文

Python 并发编程 —— 线程池

摘要Python并发编程中线程池(ThreadPoolExecutor)能有效解决多线程任务开销问题。通过预先创建并管理一组线程线程池可以复用线程资源避免频繁创建销毁线程的开销。concurrent.futures模块提供了高层接口其中Executor抽象类有两个具体实现ThreadPoolExecutor(线程池)和ProcessPoolExecutor(进程池)。ThreadPoolExecutor支持submit()方法提交任务返回Future对象以及map()方法批量处理可迭代对象。示例展示了如何创建线程池、提交任务、获取结果以及使用上下文管理器简化代码。相比直接创建线程线程池能显著提高程序性能特别是在处理大量短时任务时。目录Python 并发编程 —— 线程池Python 模块concurrent.futuresExecutor 类ThreadPoolExecutorExecutor 的具体子类如何创建 ThreadPoolExecutor示例输出结果以上下文管理器方式实例化 ThreadPoolExecutor示例输出结果Executor.map () 函数的使用示例输出结果Python 并发编程 —— 线程池如果我们需要为多线程任务创建大量线程会产生极高的计算开销过多的线程还会引发诸多性能问题其中一个主要问题就是吞吐量受限。我们可以通过创建线程池来解决这一问题。线程池可定义为一组预先实例化、处于空闲状态且随时准备接收任务的线程。当需要执行大量任务时创建线程池远比为每个任务都实例化新线程更优。线程池可通过以下方式管理大量线程的并发执行线程池中的线程完成执行后可被重新利用若某个线程终止会自动创建新线程来替代它。Python 模块concurrent.futuresPython 标准库中包含concurrent.futures模块该模块在 Python 3.2 版本中被引入为开发者提供了启动异步任务的高层级接口。它是构建在 Python 线程和多进程模块之上的抽象层能为通过线程池或进程池运行任务提供统一接口。在后续小节中我们将学习concurrent.futures模块的不同类。Executor 类Executor是concurrent.futures模块中的一个抽象类无法直接使用需要借助它的以下两个具体子类ThreadPoolExecutor线程池执行器ProcessPoolExecutor进程池执行器ThreadPoolExecutorExecutor 的具体子类该类是 Executor 抽象类的具体子类之一基于多线程实现会为任务提交提供一个线程池。线程池会将任务分配给可用线程并调度线程执行。如何创建 ThreadPoolExecutor借助concurrent.futures模块及其具体子类ThreadPoolExecutor我们可以轻松创建线程池。首先需要根据需求的线程数量构造一个ThreadPoolExecutor实例默认线程数为 5随后即可向线程池提交任务。调用submit()方法提交任务时会返回一个Future对象。该对象包含 **done ()** 方法可用于判断对应的异步任务是否执行完成即 Future 对象是否已解析出结果。当任务完成时线程池执行器会为该 Future 对象设置执行结果。示例from concurrent.futures import ThreadPoolExecutor from time import sleep def task(message): sleep(2) return message def main(): executor ThreadPoolExecutor(5) future executor.submit(task, (Completed)) print(future.done()) sleep(2) print(future.done()) print(future.result()) if __name__ __main__: main()输出结果plaintextFalse True Completed在上述示例中我们构造了一个包含 5 个线程的ThreadPoolExecutor实例然后向其提交了一个任务 —— 该任务会等待 2 秒后返回指定信息。从输出结果可以看到任务在 2 秒内未完成因此第一次调用done()方法返回False2 秒后任务执行完毕再次调用done()方法返回True此时调用result()方法即可获取该 Future 对象对应的任务结果。以上下文管理器方式实例化 ThreadPoolExecutor实例化ThreadPoolExecutor还有另一种方式 —— 使用上下文管理器其功能与上述方式一致核心优势是语法更简洁、可读性更高。通过以下代码即可实现上下文管理器方式的实例化with ThreadPoolExecutor(max_workers 5) as executor:示例以下示例源自 Python 官方文档。首先需要导入concurrent.futures模块然后定义一个load_url()函数用于加载指定的 URL 地址。随后创建包含 5 个线程的ThreadPoolExecutor实例并将其作为上下文管理器使用最终通过调用 Future 对象的result()方法获取任务结果。import concurrent.futures import urllib.request URLS [http://www.foxnews.com/, http://www.cnn.com/, http://europe.wsj.com/, http://www.bbc.co.uk/, http://some-made-up-domain.com/] def load_url(url, timeout): with urllib.request.urlopen(url, timeout timeout) as conn: return conn.read() with concurrent.futures.ThreadPoolExecutor(max_workers 5) as executor: # 提交所有URL的加载任务构建Future对象与URL的映射 future_to_url {executor.submit(load_url, url, 60): url for url in URLS} # 遍历已完成的Future对象 for future in concurrent.futures.as_completed(future_to_url): url future_to_url[future] try: data future.result() except Exception as exc: print(%r 执行出错%s % (url, exc)) else: print(%r 页面大小为 %d 字节 % (url, len(data)))输出结果上述 Python 脚本的输出结果如下plaintexthttp://some-made-up-domain.com/ 执行出错urlopen error [Errno 11004] getaddrinfo failed http://www.foxnews.com/ 页面大小为 229313 字节 http://www.cnn.com/ 页面大小为 168933 字节 http://www.bbc.co.uk/ 页面大小为 283893 字节 http://europe.wsj.com/ 页面大小为 938109 字节Executor.map () 函数的使用Python 中的map()函数被广泛用于各类任务其中一个典型用途是将某个函数应用于可迭代对象的每一个元素。同理我们可以使用Executor.map()函数将迭代器的所有元素映射到指定函数并将这些映射后的任务作为独立作业提交给ThreadPoolExecutor。通过以下 Python 脚本示例可理解该函数的工作原理。示例在本示例中map()函数被用于将square()平方函数应用于values数组中的每一个值。from concurrent.futures import ThreadPoolExecutor values [2,3,4,5] def square(n): return n * n def main(): with ThreadPoolExecutor(max_workers 3) as executor: results executor.map(square, values) for result in results: print(result) if __name__ __main__: main()输出结果上述 Python 脚本的输出结果如下plaintext4 9 16 25

相关文章:

Python 并发编程 —— 线程池

摘要:Python并发编程中,线程池(ThreadPoolExecutor)能有效解决多线程任务开销问题。通过预先创建并管理一组线程,线程池可以复用线程资源,避免频繁创建销毁线程的开销。concurrent.futures模块提供了高层接口,其中Exec…...

秦皇岛口碑好的短视频运营?

在当今数字化浪潮中,短视频已成为企业营销和个人展示的重要渠道。而在秦皇岛,寻找一家口碑好的短视频运营公司至关重要,秦皇岛恒域传媒便是其中的佼佼者。专业的策划团队秦皇岛恒域传媒拥有一支经验丰富、创意十足的策划团队。他们深入了解不…...

口碑好的动漫二创剪辑,广告传媒企业哪个好

在动漫产业蓬勃发展的当下,动漫二创剪辑以及广告传媒服务变得越来越重要。众多企业在这个领域各展身手,其中广州智映动漫文化传播有限公司凭借其独特的优势脱颖而出,下面我们将通过与传统大型动漫企业的对比,来深入了解智映动漫的…...

2026维普AI检测算法变动分析:为何你的降AIGC突然失效?附实测3款高效降AI工具

维普官方最新通知: 2026年2月5日,维普个人AIGC检测服务完成了一次重大更新! 很多同学还没反应过来,拿着之前的稿子去测,结果直接傻眼;甚至有人直接去问导师,明明都是一样的内容,AI率…...

I2C速率模式全解析

I2C通信速率详解 一、I2C速率模式概述 I2C总线支持多种速率模式,每种模式都有其特定的应用场景和性能特点。以下是主要的速率模式对比: 速率模式传输速率应用场景特点标准模式100 kbps通用低速设备最早定义的速率,兼容性最好快速模式400 k…...

我顶我顶我顶我顶我顶我顶我顶我顶我顶我

Unibest 自定义导航栏模板指南 Unibest 是一个基于 uni-app 的框架,提供了强大的自定义能力。以下是关于如何自定义导航栏模板的详细说明:基本导航栏自定义 在 Unibest 中,你可以通过修改页面配置文件或使用组件来自定义导航栏:ht…...

前台电话,故障

电脑有录音。有录音,不弹窗,软件显示离线 软件安装文件夹里面那些脚本需要再覆盖,覆盖一下...

IP地址基本概念

(一)IP地址的定义与核心作用IP地址即互联网协议地址,是分配给互联网上每一台主机(计算机、服务器、路由器等)或网络设备的唯一标识,相当于网络世界中的“身份证”。其核心作用有两点:一是定位网…...

二十、Kubernetes基础-8-kubeadm-kubernetes-deployment-guide-04-networking

kubeadm 部署 Kubernetes 完全指南(四):集群网络配置与 CNI 插件实战 作者:云原生架构专家 技术栈:Kubernetes Networking, Calico, Flannel, Cilium, CNI 难度等级:★★★★★(专家级&#xff…...

openclaw-飞书正式版插件 部署攻略 windows

文章目录前言一、Windows版本部署1.安装nvm2.安装node3.配置并安装git4.安装openclaw5.模型配置6.安装飞书插件前言 作为大模型从对话迈向自动化生产的重要环节,openclaw部署的兴起引来了泼天的关注与流量。日前,飞书官方也是公开了其更加方便快捷的正式…...

DHCP 技术课程课后总结

今天的《DHCP 技术》课程已圆满结束,课程承接此前 IP 地址基础、VLAN 与 VLAN 间路由的知识内容,围绕动态 IP 地址分配的业务需求、DHCP 协议核心原理、地址分配方式、完整工作流程、DHCP 中继技术及工程化配置方法展开全面讲解。通过本次学习&#xff0…...

杭州 OpenClaw 开发者聚会来了!NineData 叶正盛将分享《AI Agent 数据库智能诊断实践》

2026 年 3 月 22 日,由亚马逊云科技主办的“杭州 OpenClaw 开发者聚会”线下活动将在杭州举办。NineData 的创始人 & CEO 叶正盛受邀参会,将带来主题为《AI Agent 数据库智能诊断实践》的技术分享。 杭州 OpenClaw 开发者聚会以“编程无界&#xff0…...

探索Python 融合地学:使用Python一键进行栅格数据Sen+MK长时间序列趋势分析+显著性检验

在长时间序列的植被覆盖(NDVI、LAI)、气温或降水变化研究中,我们经常需要回答两个问题:趋势是什么?(变绿了还是变黄了?)趋势显著吗?(是真变了,还是…...

Spring框架(3) 整合JUnit测试全攻略

一.Spring 整合 Junit 测试框架基本概念Spring 整合 Junit 是为了方便在 Spring 环境下进行单元测试和集成测试。通过 Spring 提供的测试支持,可以轻松地加载 Spring 容器、注入依赖以及进行事务管理等操作。核心注解RunWith(SpringRunner.class)替代了传统的 Junit…...

哈希表:链地址法和开放定址法

在哈希表中,不免会发生元素之间的冲突,为了避免冲突,因此就需要一些措施来加入元素,于是链地址法和开放定址法就产生了图1.1链地址法顾名思义,就是使用链表来存储冲突的元素。 如果插入的元素列表是{1,11,13,73,93,125…...

Django 学习 Part 3: 视图与模板系统

本教程基于 Django 6.0 官方文档,承接第二部分的数据库模型,深入讲解 Django 的视图(Views)和模板系统(Templates)。 一、什么是视图? 在 Django 中,视图(View&#xff…...

紧急预警|2026年智能摄像头漏洞大爆发!

智能摄像头早已渗透生活的每一个角落——家庭客厅、商铺门店、企业车间、城市街头,甚至医院、港口等敏感区域。但很少有人知道,这个“守护眼”,随时可能变成泄露隐私、窃取情报的“透视镜”。 据Check Point 2026年网络安全报告披露&#xff…...

brew安装skills报权限太高的解决办法

现象 在openclaw web-ui界面,安装需要通过brew方式安装的skills,安装失败:权限太高 Install failed (exit 1): Error: Running Homebrew as root is extremely dangerous and no longer supported.解决办法 1、openclaw 不要使用 root 用户安…...

欧意下载地址okxz.run复制进去-2026年最新版V5.6.12.5.34安卓/苹果版

欧意下载地址okxz.run复制进去-2026年最新版V5.6.12.5.34安卓/苹果版1975年9月20日下午15 - 17点出生的人,其性格往往兼具热情与沉稳。热情使他们在社交场合中如鱼得水,能迅速与他人建立起良好的关系。他们乐于分享自己的想法和经历,总能以积…...

榨干你的 OpenClaw:AI 编程 PUA 完全指南,从此让它不敢摆烂。

大家好,我是顾北!最近你有没有这种体验:让 Claude Code / OpenClaw 帮你调个 bug,AI 试了两下,然后很礼貌地说:"Im unable to resolve this issue. Please check your environment configuration.&quo…...

海立股份子公司参展AWE2026 以创新科技赋能行业转型升级

近日,中国家电及消费电子博览会(AWE2026)在上海新国际博览中心与上海东方枢纽国际商务合作区同步启幕。展会期间,作为全球压缩机领域的领军企业,海立股份(600619.SH)子公司海立电器以“精芯劲力…...

270亿美元合作背后:Nebius与Meta的AI算力战略布局

270亿美元战略合作:Nebius与Meta的算力交易盛宴品玩3月17日消息,据siliconangle报道,荷兰云基础设施巨头Nebius Group NV与Meta Platforms Inc.签署了总额达270亿美元的战略合作协议。其中,Nebius将提供价值120亿美元的专用人工智…...

a16z最新榜单:这些AI应用正在取代你的旧工具

最近,硅谷顶级风投a16z发布了一份重磅榜单。以前只算纯粹的AI原生应用。但这次,像CapCut(剪映国际版)、Canva、Notion这些,只要AI成了核心体验的“传统巨头”,全被纳入了。结果呢?移动端月活第二…...

《拆毁》多人模式:突破网络同步难题,开启游戏新体验

【导语:自《拆毁》发布前,多人模式就备受玩家期待。开发团队历经多年探索,克服网络同步、脚本编写、合并兼容等诸多难题,最终成功实现该模式,为玩家带来独特游戏体验。】网络同步:突破带宽与确定性难题在《…...

打通智能体孤岛:用 AgentRun 构建生产级 A2A 多 Agent 管理协作系统

作者:丛霄 当我们把一个复杂业务拆解成多个专职 Agent 时,随之而来的问题是:这些 Agent 怎么知道彼此的存在?怎么找到对方、理解对方的能力、发起调用? A2A(Agent-to-Agent)协议给出了标准答案。…...

Spring事务控制详解:从概念到声明式事务(AOP实现)

一、Spring事务控制在分层开发的Java EE应用中,事务处理是业务层的核心职责。Spring框架提供了一套完整的、基于AOP的声明式事务管理方案,能让我们在不侵入业务代码的前提下,轻松控制事务。1、事务介绍1.1、什么是事务?事务是保证…...

【多式联运】改进的ALNS算法冷藏品需求不确定下多式联运运输路线优化【含Matlab源码 15180期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...

148.《mobx-react-lite + TypeScript 入门实战教程(完整版)》

一、教程前言 MobX 是一款轻量级响应式状态管理库,相比 Redux 更简洁、学习成本更低;mobx-react-lite 是 MobX 专为 React 函数组件设计的轻量级绑定库,结合 TypeScript 可实现类型安全的状态管理。 本教程通过「计数器 汽车列表」实战案例&…...

LITESTAR 4D应用:道路照明设计

设计意义道路照明是一种维护公共安全的技术和设施,它能够提高夜间路段的通行效率和安全性,也能减少交通事故发生率。通过道路照明系统,驾驶员能够更清楚地看到道路上的情况,避免碰撞和其他意外事件,行人也能够更加安全…...

受激发射损耗(STED)显微镜

超分辨率显微镜——光学系统,可以达到超过众所周知的阿贝衍射极限——已经有了广泛的用途,因为获得最大可能的分辨率是该领域的关键目标之一。实现这一目标的一种方法是受激发射损耗(STED)的概念。在这里,荧光样品由两…...