【问题标题】:Applying parallelization when updating dictionary values更新字典值时应用并行化
【发布时间】:2017-12-14 00:37:29
【问题描述】:
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】:

    您可以使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 2021-03-24
      • 2021-06-03
      • 1970-01-01
      • 2019-01-17
      • 2012-07-14
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多