Python多进程处理数据

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

背景

假设有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。

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值