Python应用专题 | 5:Python多进程处理数据

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本文介绍如何使用多进程的方式高效处理海量任务数据

更多、更及时内容欢迎留意微信公众号小窗幽记机器学习

背景

假设有1千万任务数据,每条数据处理耗时1s,那么如何加速整个任务的处理速度?其中一种解决方案就是使用多进程处理。

解决方案

pandas + pandarallel
安装pandarallel: pip install pandarallel

示例

# -*- coding: utf-8 -*-
# @Time    : 2022/5/21 6:14 下午
# @Author  : JasonLiu
# @FileName: test.py
import time
import pandas as pd
from pandarallel import pandarallel
pandarallel.initialize(nb_workers=5)
text1 = ["华中科技大学"+str(i) for i in range(10)]

task_df = pd.DataFrame({"text1": text1})


def text_processing(text):
    """
    做一些文本的处理操作, 这里仅仅是为了演示
    """
    text += " HUST"
    time.sleep(2)
    return text


start_time = time.time()
task_df["new_text1"] = task_df["text1"].apply(text_processing)
end_time = time.time()
print("raw apply cost=", end_time-start_time)
print(task_df)
start_time = time.time()
task_df["new_text2"] = task_df["text1"].parallel_apply(text_processing)
end_time = time.time()
print("parallel_apply cost=", end_time-start_time)
print(task_df)

运行结果如下:

INFO: Pandarallel will run on 5 workers.
INFO: Pandarallel will use Memory file system to transfer data between the main process and workers.
raw apply cost= 20.01844358444214
     text1     new_text1
0  华中科技大学0  华中科技大学0 HUST
1  华中科技大学1  华中科技大学1 HUST
2  华中科技大学2  华中科技大学2 HUST
3  华中科技大学3  华中科技大学3 HUST
4  华中科技大学4  华中科技大学4 HUST
5  华中科技大学5  华中科技大学5 HUST
6  华中科技大学6  华中科技大学6 HUST
7  华中科技大学7  华中科技大学7 HUST
8  华中科技大学8  华中科技大学8 HUST
9  华中科技大学9  华中科技大学9 HUST
parallel_apply cost= 4.040616035461426
     text1     new_text1     new_text2
0  华中科技大学0  华中科技大学0 HUST  华中科技大学0 HUST
1  华中科技大学1  华中科技大学1 HUST  华中科技大学1 HUST
2  华中科技大学2  华中科技大学2 HUST  华中科技大学2 HUST
3  华中科技大学3  华中科技大学3 HUST  华中科技大学3 HUST
4  华中科技大学4  华中科技大学4 HUST  华中科技大学4 HUST
5  华中科技大学5  华中科技大学5 HUST  华中科技大学5 HUST
6  华中科技大学6  华中科技大学6 HUST  华中科技大学6 HUST
7  华中科技大学7  华中科技大学7 HUST  华中科技大学7 HUST
8  华中科技大学8  华中科技大学8 HUST  华中科技大学8 HUST
9  华中科技大学9  华中科技大学9 HUST  华中科技大学9 HUST

从中可以看出,使用 Pandarallel 使得整个处理耗时从原始的20s,缩减到4s。

【更多、更及时内容欢迎留意微信公众号小窗幽记机器学习

相关文章
|
1天前
|
数据采集 JSON 测试技术
如何在Python中高效实现CSV到JSON的数据转换
在实际项目中,数据格式转换是常见问题,尤其从CSV到JSON的转换。本文深入探讨了多种转换方法,涵盖Python基础实现、数据预处理、错误处理、性能优化及调试验证技巧。通过分块处理、并行处理等手段提升大文件转换效率,并介绍如何封装为命令行工具或Web API,实现自动化批量处理。关键点包括基础实现、数据清洗、异常捕获、性能优化和单元测试,确保转换流程稳定高效。
102 82
|
7天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
2天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
24 12
|
1天前
|
存储 人工智能 程序员
通义灵码AI程序员实战:从零构建Python记账本应用的开发全解析
本文通过开发Python记账本应用的真实案例,展示通义灵码AI程序员2.0的代码生成能力。从需求分析到功能实现、界面升级及测试覆盖,AI程序员展现了需求转化、技术选型、测试驱动和代码可维护性等核心价值。文中详细解析了如何使用Python标准库和tkinter库实现命令行及图形化界面,并生成单元测试用例,确保应用的稳定性和可维护性。尽管AI工具显著提升开发效率,但用户仍需具备编程基础以进行调试和优化。
70 9
|
1天前
|
算法 安全 网络安全
基于 Python 的布隆过滤器算法在内网行为管理中的应用探究
在复杂多变的网络环境中,内网行为管理至关重要。本文介绍布隆过滤器(Bloom Filter),一种高效的空间节省型概率数据结构,用于判断元素是否存在于集合中。通过多个哈希函数映射到位数组,实现快速访问控制。Python代码示例展示了如何构建和使用布隆过滤器,有效提升企业内网安全性和资源管理效率。
27 9
|
1天前
|
数据采集 存储 前端开发
用Python抓取亚马逊动态加载数据,一文读懂
用Python抓取亚马逊动态加载数据,一文读懂
|
23天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
143 9
|
7月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
7月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
221 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
6月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。