Python中的多处理具有大量进程但限制了cpus的数量

时间:2013-05-21 02:52:31

标签: python multiprocessing multiprocess

我需要通过函数A处理大量数据文件。假设1000个文件,每个文件的每个进程在6GB内存下花费不到15分钟。我的电脑有32GB和8 cpus,所以我最多可以使用4个进程(24GB内存和4个cpus)来保证安全。所以我的问题是我可以在python中使用multiprocess包来创建4个进程,并且每个进程连续获得函数A来独立处理数据文件,如下图所示。显然每个cpu必须处理大约。 250个文件,但1000个文件的文件大小不同,那么它不一定是真的。需要注意的是,一旦一个过程完成,它就会立即分配一个新的工作,无论其他过程是什么完成,即同时完成所有四个过程没有等待时间。功能A的返回在这里并不重要。请提供密码!谢谢你的任何建议。

enter image description here

2 个答案:

答案 0 :(得分:3)

我认为最好的解决方案是使用multiprocessing.Pool。它使得设置进程池(按照您指定的数量)非常容易,然后为它们提供并行执行的作业。这是一些基本的示例代码:

import multiprocessing as mp

def handle_file(filename):
    # do your processing here

def process_files(list_of_files):
    pool = mp.Pool(4) # argument is number of processes, default is the number of CPUs
    pool.map(list_of_files) # this returns a list of results, but you can ignore it

这段代码会比必要的慢一点,因为它将函数调用的结果传递回父进程(即使返回值都是None),但我怀疑开销是相对的如果您的处理任务需要很长时间,那就很小。

答案 1 :(得分:0)

1000个文件在一台机器上每个15分钟将超过10天。我使用Dispy之类的东西来分发作品。这样可以免费监控等。