Pandas 在熊猫中并行应用函数的时间比预期的长

Pandas 在熊猫中并行应用函数的时间比预期的长,pandas,python-multiprocessing,Pandas,Python Multiprocessing,我有一个简单的cleaner函数,可以从数据帧(和其他预处理内容)中删除特殊字符。我的数据集很大,我想利用多处理来提高性能。我的想法是将数据集分解成块,并在每个块上并行运行此cleaner函数。 我使用了dask库和python中的多处理模块。然而,应用程序似乎被卡住了,并且比单核运行要花更长的时间 这是我的代码: from multiprocessing import Pool def parallelize_dataframe(df, func): df_split = np.ar

我有一个简单的cleaner函数,可以从数据帧(和其他预处理内容)中删除特殊字符。我的数据集很大,我想利用多处理来提高性能。我的想法是将数据集分解成块,并在每个块上并行运行此cleaner函数。 我使用了dask库和python中的多处理模块。然而,应用程序似乎被卡住了,并且比单核运行要花更长的时间

这是我的代码:

from multiprocessing import Pool

def parallelize_dataframe(df, func):
    df_split = np.array_split(df, num_partitions)
    pool = Pool(num_cores)
    df = pd.concat(pool.map(func, df_split))
    pool.close()
    pool.join()
    return df

def process_columns(data):
    for i in data.columns:
        data[i] = data[i].apply(cleaner_func)
    return data

mydf2 = parallelize_dataframe(mydf, process_columns)
我可以从资源监视器中看到所有的内核都在使用,但是正如我前面所说的,应用程序被卡住了

p.S。 我在windows server 2012上运行了这个程序(问题发生在这里)。在unix环境上运行这段代码,我实际上看到了多处理库的一些好处。


提前谢谢。

在df=pd.concat、pool.close()和pool.join()行中,我觉得有些不对劲。为什么要在返回的df已经分配了上面两行之后加入呢?这些天我会使用并摆脱手动多处理headhache@flyingmeatball. 我明白你的意思,实际上不需要concat。但是,即使删除此函数调用,问题仍然存在。在df=pd.concat、pool.close()、pool.join()行中,我觉得有些不对劲。为什么要在返回的df已经分配了上面两行之后加入呢?这些天我会使用并摆脱手动多处理headhache@flyingmeatball. 我明白你的意思,实际上不需要concat。但是,即使删除此函数调用,问题仍然存在。