我有一个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 =??)
但我找不到任何可以建议设置数字的内容。
我该怎么办?