【发布时间】:2015-09-20 12:09:58
【问题描述】:
我正在使用 python 2.7.10。 我读了很多文件,将它们存储到一个大列表中,然后尝试调用多处理并将大列表传递给这些多进程,以便每个进程都可以访问这个大列表并进行一些计算。
我正在使用这样的池:
def read_match_wrapper(args):
args2 = args[0] + (args[1],)
read_match(*args2)
pool = multiprocessing.Pool(processes=10)
result=pool.map(read_match_wrapper,itertools.izip(itertools.repeat((ped_list,chr_map,combined_id_to_id,chr)),range(10)))
pool.close()
pool.join()
基本上,我将多个变量传递给“read_match”函数。为了使用 pool.map,我编写了“read_match_wrapper”函数。我不需要从这些过程中返回任何结果。我只是想让他们跑完。
当我的数据列表“ped_list”非常小时,我可以完成整个过程。当我加载所有数据(例如 10G)时,它生成的所有多进程都显示“S”并且似乎根本不起作用..
我不知道你可以通过池访问多少数据是否有限制? 我真的需要帮助!谢谢!
【问题讨论】:
-
read_match的代码是什么? -
您能否检查
itertools.izip()部分是否返回了正确的值?如果您的数据真的是 10G,使用repeat(),它可能会变得更糟,并且可能会消耗太多内存。 -
是的,我认为内存是这里的问题。每次它产生一个进程时,都会复制内存。而集群负担不起!
标签: python multiprocessing bigdata sleep pool