Python 2.7:如何在多处理模块中确定maxtasksperchild?

时间:2015-03-02 21:29:08

标签: python memory pandas parallel-processing multiprocessing

我有一个python程序,我想用它来制作10个大的CSV。每个CSV为1列x 5百万行。

在这个程序中有一个名为make_pickle()的函数,它接受文件路径,加载文件,然后保存pickle。它看起来像:

def make_pickle(path):
    df1 = pandas.read_csv(path)
    df2 = <do stuff to df1>
    df3 = <do stuff to df2>

    df3.to_pickle(<modified path>)

    del df1
    del df2
    del df3
    gc.collect()

我称之为:

import gc
import pandas
import multiprocessing




def make_pickle(path):
    df1 = pandas.read_csv(path)
    df2 = <do stuff to df1>
    df3 = <do stuff to df2>

    df3.to_pickle(<modified path>)

    del df1
    del df2
    del df3
    gc.collect()





paths_to_process = [<path1>, 
                    <path2>, 
                    <path3>, 
                    <path4>, 
                    <path5>, 
                    <path6>, 
                    <path7>,
                    <path8>,
                    <path9>] 




if __name__ == '__main__':
    multiprocessing.freeze_support()       # This is necessary for Windows
    pool = multiprocessing.Pool(3)         # multiprocessing.cpu_count() is 4, so I'll use 3

    pool.map(make_pickle, paths_to_process)

我让这段代码运行了一段时间,由于某些原因我和MemoryError一起运行。 我试过添加

del df1
del df2
del df3 

in

make_pickle()

但这并没有真正帮助。

我试图在

上找到一些文档
multiprocessing.Pool(maxtasksperchild =??)

但我找不到任何可以建议设置数字的内容。

我该怎么办?

0 个答案:

没有答案