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

news2024/12/23 9:09:48

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS 17.6.1版本重发,修复高级数据保护错误

今日,苹果没有带来iOS 17.6.2的更新,而是重新发布了iOS 17.6.1版本,本次升级版本号为21G101,高于第一版的21G93。距离初版发布相隔一周半时间。 在 iOS / iPadOS 17.6.1 的更新日志,苹果公司写道:“此更新包…

只用一个 HTML 元素可以写出多少形状?——伪元素篇(上)

只用一个 div 元素,我们已经通过四个篇章写了很多形状。 首先,我们通过对这个 div 的宽度与高度的直接控制,轻松写出矩形和正方形,并结合 transform 的 skew 方法写出了平行四边形与菱形。 其次,我们通过对边框的灵活…

iphone异常问题常用修复方法

作为智能手机的领军者,iPhone凭借其卓越的性能和稳定的系统赢得了全球用户的青睐。然而,就像任何电子设备一样,iPhone在使用过程中也难免会遇到各种异常问题,如卡顿、无法充电、应用闪退等。这些问题虽然令人头疼,但大…

linux之ELK

ELK概述 ELK是一套开源的日志分析系统,由elasticsearchlogstashKibana组成。 官网说明:https://www.elastic.co/cn/products 首先: 先一句话简单了解E,L,K这三个软件 elasticsearch: 分布式搜索引擎 logstash: 日志收集与过滤,输出给elasticsearch Kiban…

校园快递代取系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

Windows搭建我的世界MC服务器 【Minecraft外网联机教程】

目录 ⛳️推荐 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 1.3 创建我的世界服务器 2. 局域网联机测试 3. 安装cpolar内网穿透 4. 公网联机Minecraft 5. 配置固定远程联机端口地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通…

【启明智显技术分享】工业级HMI芯片Model系列GUI合成到项目中的指南

在工业自动化、智能终端HMI、车载仪表盘等领域,高性能的HMI(人机界面)芯片是不可或缺的核心组件。启明智显推出的Model系列(如Model3C、Model3、Model4)HMI芯片,以其卓越的性能和广泛的应用领域&#xff0c…

大模型学习应用 2:快速上手大模型基于langchain实现RAG检索应用

快速上手大模型基于langchain实现RAG检索应用 - 项目作业 目录 准备工作镜像选择算力选择安装包数据说明提示参考链接 Task1 申请 api 后,使用 langchain 导入大模型,并打印出大模型信息Task2 使用 langchian 加载数据,并把数据打印出来Task…

WebSocket 快速入门

WebSocket是什么 WebSocket 是基于 TCP 的一种新的应用层网络协议。它实现了浏览器与服务器全双工通信,即允许服务器主动发送信息给客户端。因此,在 WebSocket 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性…

Linux系统中安装Git(详细教程)

在Linux系统中安装Git,可以通过多种方式来实现,主要包括使用包管理器安装和从源代码编译安装。以下是详细的安装步骤: 一、使用包管理器安装(不建议该方式) 大多数Linux发行版都提供了包管理器,如Debian/…

90%的人都在用这7个图片转pdf技巧,转换速度很快!

图片怎么转换成pdf格式?图片和pdf格式是两种完全不一样的格式,但是如果想要将图片转换成pdf格式还是蛮容易的,常见的方法就有数十种了。 本文整理了几种常见的图片转pdf的方法,包括图片转pdf在线方法,有需要的朋友可以…

取证工具 ElcomSoft iOS Forensics Toolkit: 在 Windows 中加载 HFS 镜像

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 Elcomsoft iOS Forensics Toolkit 功能简介 Elcomsoft iOS Forensics Toolkit 软件工具包适用于取证工作,对 iPhone、iPad 和 iPod Touch 设备执行完整文件系统和逻辑数据采集。对设备文件系统制…

【Linux操作系统】基础IO

目录 一、接口使用1.1 铺垫知识1.2 C接口使用1.3 系统接口使用 二、认识fd三、缓冲区四、文件系统五、软硬连接六、动静态库6.1 静态库的制作和使用6.1 动态库的制作和使用 七、理解动态库加载 一、接口使用 1.1 铺垫知识 文件文件内容文件属性 。一个文件如果它的文件内容为…

AI产品经理如何入门?零基础入门到精通,收藏这一篇就够了

现在做产品经理,真的挺累的。 现在产品越来越难做,晋升困难,工资迟迟不涨……公司裁员,产品经理首当其冲!! 做产品几年了,还没升职,就先到了“职业天花板”。 想凭工作几年积累的…

linux被植入木马排查思路

linux被植入木马排查思路 一、是否侵入检查 1)检查系统登录日志 last命令 2)检查系统用户 1、检查是否有异常用户 cat /etc/passwd 2、查看是否产生了新用户、uid和gid为0的用户 grep "0" /etc/passwd 3、查看passwd的修改时间&#xf…

CY7C68000 实现High Speed USB2 UART

已经在Malogic PFGA Board 上用CY7C68000 实现High Speed USB2UART,店铺还上架了 ULPI (USB3300)的 TestBench 和ModelSim 验证环境,刚刚写出来的,其实效果和UTMI差不多, 比UTMI麻烦一些,需要写…

k8s篇之kubectl安装命令自动补全插件

1. 简介 常见情况:在部署生产环境或者测试环境的k8s集群时,常因输入命令繁琐,使得执行相关k8s操作排错时麻烦,以下自动补全插件即可解决这一问题。 以下安装亲测有效 2. 安装 安装bash completion yum install -y bash-comple…

车载以太网交换机入门基本功(3)—VLAN 转发

在《车载以太网交换机入门基本功(2)》中提到,报文通过携带Tag字段,表明报文所属的VLAN。本文将介绍携带Tag报文在VLAN下的转发过程。而在实际转发过程中,交换机的端口属性起到关键作用。 交换机端口属性 交换机的端口…

计算机毕业设计选题推荐-地震数据分析与预测-Python爬虫可视化

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Java语言程序设计——篇十五(2)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…