更新字典值时应用并行化

时间:2017-12-14 00:37:29

标签: python multithreading pandas dictionary parallel-processing

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,但我找不到在两个库中使用字典值的方法。

非常感谢任何见解!

1 个答案:

答案 0 :(得分: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)