如何从python3.5中的工作进程池中最佳返回大型DataFrame?

我正在将一个大型数据帧传递给多个进程,这些进程将根据传递给该进程的其他参数返回不同的数据帧。我将输入数据帧存储在Multiprocessing.NameSpace()对象中,并在所有池化进程之间共享它,并且池化进程不会更改输入数据帧。从合并的进程返回大数据帧非常慢(甚至比顺序执行慢)。我已经尝试将过程结果存储在Manager().dict()对象中,但是它也很慢,如文档

中所述
  

服务器进程管理器比使用共享内存对象更灵活,因为可以使它们支持任意对象类型。同样,单个管理器可以由网络上不同计算机上的进程共享。但是,它们比使用共享内存要慢。

作为参考,这是我的代码概述

def extract_stat_by_process(a_namespace,param1,param2,...,key,process_results):
    # do something according to params
    process_output[key] = result

with mp.Manager() as manager:
    process_results = manager.dict()
    namespace = manager.NameSpace()
    namespace.df = input_df
    process_inputs = [[namespace,each[0],each[1],process_results] for each,key in input_params]
    with mp.Pool(8) as pool:
        pool.starmap(extract_stat_by_process,process_inputs)

上面相同代码的当前顺序版本大约需要5秒钟,而上面的长达93秒钟。返回经过处理的数据帧以使时间最少的最佳方法是什么?

liyi723 回答:如何从python3.5中的工作进程池中最佳返回大型DataFrame?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3146490.html

大家都在问