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

【Python系列】 并发编程在数据处理中的应用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 并发编程的基本概念
    • ThreadPoolExecutor 的工作原理
    • 示例代码解析
    • 并发编程的优势
    • 注意事项
    • 结语

在现代软件开发中,数据处理是一个常见且关键的任务。随着数据量的不断增长,传统的单线程处理方式已经无法满足日益增长的处理速度需求。为了提高效率,开发者们开始使用并发编程技术,以实现多任务同时执行。Python 语言提供了多种并发执行任务的方法,其中ThreadPoolExecutorconcurrent.futures模块中一个非常实用的工具,它允许开发者轻松地创建线程池来并发执行任务。
在这里插入图片描述

并发编程的基本概念

并发编程是指在计算机程序中,多个任务或线程同时执行,以提高程序的执行效率。这种编程模式可以充分利用多核处理器的优势,实现资源的最大化利用。在 Python 中,有多种实现并发的方法,包括多线程、多进程、异步编程等。

ThreadPoolExecutor 的工作原理

ThreadPoolExecutor是 Python 标准库concurrent.futures模块中的一部分,它提供了一个简单的高层 API 来创建线程池。线程池中的线程可以并发执行多个任务,这些任务可以是函数调用或任何可调用对象。通过使用线程池,可以避免为每个任务创建和销毁线程的开销,从而提高程序的效率。

# 并发请求
from concurrent.futures import ThreadPoolExecutor
import concurrent.futures
futures = []
with ThreadPoolExecutor(max_workers=10) as executor:for chunk in combined_chunk_document_list:chunk_doc = Document(page_content=chunk.page_content.encode("utf-8"), metadata=chunk.metadata)futures.append(executor.submit(llm_transformer.convert_to_graph_documents, [chunk_doc]))for i, future in enumerate(concurrent.futures.as_completed(futures)):graph_document = future.result()graph_document_list.append(graph_document[0])

示例代码解析

在提供的代码示例中,我们可以看到ThreadPoolExecutor是如何被用来并发处理文档转换任务的。以下是对示例代码的详细解析:

  1. 导入必要的模块:首先,代码导入了concurrent.futures模块中的ThreadPoolExecutoras_completed函数。

  2. 创建线程池:使用with ThreadPoolExecutor(max_workers=10)语句创建了一个最大容纳 10 个工作线程的线程池。with语句确保线程池在使用完毕后能够正确关闭。

  3. 任务分发:在with语句的代码块中,遍历combined_chunk_document_list列表,对每个文档块创建一个Document对象,并将其作为参数提交给llm_transformer.convert_to_graph_documents函数进行处理。提交的任务被添加到futures列表中。

  4. 任务执行与结果收集:使用concurrent.futures.as_completed(futures)函数遍历futures列表,等待每个任务完成。一旦任务完成,通过调用future.result()获取任务结果,并将结果添加到graph_document_list列表中。

并发编程的优势

使用并发编程,特别是ThreadPoolExecutor,可以带来以下优势:

  • 提高效率:通过并发执行多个任务,可以显著提高程序的执行速度。
  • 资源优化:线程池可以有效地管理线程资源,避免频繁创建和销毁线程带来的开销。
  • 简化编程ThreadPoolExecutor提供了简洁的 API,使得并发编程变得更加简单和直观。
    在这里插入图片描述

注意事项

在使用ThreadPoolExecutor时,需要注意以下几点:

  • 线程安全:确保提交给线程池的任务是线程安全的,避免因共享资源导致的数据竞争问题。
  • 异常处理:需要对future.result()调用进行异常处理,因为任务执行过程中可能会抛出异常。
  • 资源限制:合理设置线程池的大小,以避免过多的线程消耗系统资源。

结语

并发编程是提高程序性能的有效手段之一。通过合理使用ThreadPoolExecutor,开发者可以在 Python 中轻松实现多任务并发执行,从而提高数据处理的效率。然而,开发者也需要对并发编程中的线程安全和资源管理等问题保持警惕,以确保程序的稳定性和可靠性。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

相关文章:

  • 第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略_海南新境界队
  • 设计模式22-迭代器模式
  • 【运维】深入理解 Linux 中的 `mv` 命令,使用 `mv` 移动所有文件但排除特定文件或文件夹
  • SQL Server数据库 创建表,和表的增删改查
  • 浮毛怎么去掉比较方便?最最高效解决办法宠物空气净化器分享
  • 【C++例题 / 训练】二分算法(模板 例题)
  • 【本社翻译】Unity官方XR开发电子书
  • uniapp去掉页面导航条
  • 利用贝叶斯和决策树 来进行医疗诊断的
  • SQLserver中的增删改查和数据类型
  • 如何免费获取乡镇级边界数据geoJson数据
  • 微服务可用性设计
  • 【ARM系统】基础知识总结
  • 什么是SD NAND?
  • Linux 升级安装 Weblogic-补丁!
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【5+】跨webview多页面 触发事件(二)
  • C++入门教程(10):for 语句
  • js中forEach回调同异步问题
  • Logstash 参考指南(目录)
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 力扣(LeetCode)965
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 我的zsh配置, 2019最新方案
  • 我的业余项目总结
  • nb
  • C# - 为值类型重定义相等性
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 整理一些计算机基础知识!
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (003)SlickEdit Unity的补全
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (八)c52学习之旅-中断实验
  • (待修改)PyG安装步骤
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十三)Flink SQL
  • (原)本想说脏话,奈何已放下
  • .NET C# 使用 iText 生成PDF
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net/c# memcached 获取所有缓存键(keys)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET的数据绑定
  • .NET连接数据库方式
  • .NET微信公众号开发-2.0创建自定义菜单
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • // an array of int
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理