更新字典值时应用并行化

问题描述 投票:0回答:1
datasets = {}
datasets['df1'] = df1
datasets['df2'] = df2
datasets['df3'] = df3
datasets['df4'] = df4

def prepare_dataframe(dataframe):
    return dataframe.apply(lambda x: x.astype(str).str.lower().str.replace('[^\w\s]', ''))

for key, value in datasets.items():
    datasets[key] = prepare_dataframe(value)

我需要在一些数据帧中准备数据以供进一步分析。我想并行化用于使用准备好的数据帧更新字典的for循环。此代码最终将在具有数十个内核和数千个数据帧的计算机上运行。在我的本地计算机上,我似乎没有在prepare_dataframe函数中使用多个核心。

我看过Numba和Joblib,但我找不到在两个库中使用字典值的方法。

任何见解都将非常感谢!

python multithreading pandas dictionary parallel-processing
1个回答
1
投票

您可以使用multiprocessing库。你可以阅读它的基础知识here。 以下代码可以满足您的需求:

from multiprocessing import Pool

def prepare_dataframe(dataframe):
    # do whatever you want here
    # changes made here are *not* global
    # return a modified version of what you want
    return dataframe

def worker(dict_item):
    key,value = dict_item
    return (key,prepare_dataframe(value))

def parallelize(data, func):
    data_list = list(data.items())
    pool = Pool()
    data = dict(pool.map(func, data_list))
    pool.close()
    pool.join()
    return data

datasets = parallelize(datasets,worker)
© www.soinside.com 2019 - 2024. All rights reserved.